Recientemente descubrí que si edito GRUB antes de arrancar y agrego rw init=/bin/bash
, termino con un shell de raíz.
Estar en una condición en la que quiero entender todo lo que me gustaría saber por qué sucede esto. Quiero decir, ¿es un error? ¿Es una característica? ¿Está ahí para ayudar a los administradores a arreglar las cosas, ya que solo funciona si tienes acceso físico a una computadora?
¿Lo proporciona GRUB o el núcleo real?
Respuestas:
Esta es una característica y se utiliza para el mantenimiento del sistema: permite que un administrador del sistema recupere un sistema de archivos de inicialización desordenados o cambie una contraseña olvidada.
Esta publicación en la lista de correo de Red Hat explica algunas cosas:
Por lo tanto, no está explotando nada, solo está utilizando una función estándar del núcleo.
Además, como se señaló en un comentario, el
rw
indicador está separado deinit=
, solo le dice al sistema que monte el sistema de archivos raíz como lectura-escritura (para que pueda, por ejemplo, editar el archivo mal configurado o cambiar una contraseña).fuente
rw
está completamente separado deinit=
. El primero simplemente le dice al núcleo que monte el sistema de archivos raíz de lectura-escritura.Su sistema tiene mecanismos para ejecutar y depurar (como el parámetro init) y probablemente tiene mecanismos de seguridad para evitar que los usuarios no deseados se aprovechen de ellos. Estas son características, no errores.
El gestor de arranque es responsable de iniciar el sistema operativo. La seguridad del sistema operativo obviamente no se aplica en ese punto. Simplemente puede cargar un kernel diferente, initrd, root fs o establecer diferentes opciones (como la ruta de inicio). Si desea evitar que los usuarios hagan eso, debe hacerlo en el gestor de arranque.
Su sistema (probablemente una PC, entonces BIOS) carga el gestor de arranque y, obviamente, la seguridad del gestor de arranque no se aplica a él. Si desea evitar que los usuarios inicien el BIOS desde USB o similar, debe hacerlo en ese nivel.
Su sistema puede estar en un escritorio en alguna parte. Si desea evitar que los usuarios abran la computadora y cambien el disco duro por uno propio o retiren el disco para montarlo en sus máquinas, debe hacerlo a nivel físico. Y no les impedirá recoger todo el escritorio y marcharse en su camioneta de escape ...
Así es la seguridad. Elefantes hasta el fondo.
fuente
Cuando la computadora se inicia, ejecuta un programa llamado "init", que generalmente se encuentra en
/bin/init
o/sbin/init
. Este programa es responsable de todo el inicio del sistema y de la creación de un entorno utilizable.Especificar
init=/bin/bash
le dice al núcleo que se ejecute en su/bin/bash
lugar (que es un shell). Especificarrw
le dice al núcleo que arranque con el disco duro en modo de lectura-escritura en lugar de modo de solo lectura. Tradicionalmente, el núcleo comienza con el disco en modo de solo lectura y un proceso posterior verifica la integridad del disco antes de cambiar a lectura-escritura.fuente
Unidas desde kernel.org :
fuente
Esta es una característica del núcleo: permite a su "llamador", es decir, el gestor de arranque, una gran flexibilidad. Grub le proporciona los medios para utilizar esta flexibilidad durante el arranque, pero también le proporciona los medios para restringir este tipo de manipulación . Esto tiene un sentido particular en aquellos casos en que usuarios no autorizados pueden obtener el proceso de arranque, pero de lo contrario se les niega el acceso al disco duro.
fuente
init=
puede tomar cualquier ejecutableinit=
puede tomar cualquier ejecutable, incluidos los scripts de shell .Aquí, por ejemplo, demuestro cómo crear una compilación C mínima arbitraria
init
: ¿Cómo crear una distribución Linux personalizada que ejecute solo un programa y nada más?Entonces, ¿por qué no aceptaría
/bin/bash
, de todas las cosas, que es solo un ejecutable regular y que en realidad puede ser útil? :-)A continuación, también debe intentar comprender cuáles serán las compensaciones con su habitual
init
, como systemd o Busybox 'Básicamente, con un crudo
/bin/bash
, usted:init
existíaEl control del trabajo se puede restaurar en el inicio de Busybox y en otros inits similares con un líder
-
eninittab
:Las
inittab
entradas más normales , que usan el inicio de sesión y mantienen los shells de desove si haces Ctrl + D son:que usan el
getty
ejecutable, pero TODO: no he podido generarlos yo mismo sin Busyboxinit
: getty start from command line?Puede usar esta configuración para jugar con ella y llegar a las conclusiones anteriores.
fuente