¿Por qué Linux permite 'init = / bin / bash'?


51

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?


12
Si desea "arreglar" esto, bloquee GRUB y su BIOS con una contraseña y coloque su disco duro primero en el orden de arranque. Si alguien más tiene acceso físico y puede colocar el disco duro (no encriptado) en otra computadora, ha perdido de todos modos
jofel

Respuestas:


44

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:

En sistemas tipo Unix, init es el primer proceso que se ejecuta y el antepasado final de todos los procesos que se ejecutan. Es responsable de ejecutar todos los scripts de inicio.

Le está diciendo al kernel de Linux que ejecute / bin / bash como init, en lugar de init del sistema. [...]

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 rwindicador está separado de init=, 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).


2
Además, rwestá completamente separado de init=. El primero simplemente le dice al núcleo que monte el sistema de archivos raíz de lectura-escritura.
Alexios

19

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.


Buen resumen Es posible que desee agregar cifrado de disco duro a eso, como una posible respuesta contra la camioneta.
MvG

11

Cuando la computadora se inicia, ejecuta un programa llamado "init", que generalmente se encuentra en /bin/inito /sbin/init. Este programa es responsable de todo el inicio del sistema y de la creación de un entorno utilizable.

Especificar init=/bin/bashle dice al núcleo que se ejecute en su /bin/bashlugar (que es un shell). Especificar rwle 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.


6

Unidas desde kernel.org :

KNL     Is a kernel start-up parameter.

init=   [KNL]
        Format: <full_path>
        Run specified binary instead of /sbin/init as init
        process.

rw      [KNL] Mount root device read-write on boot

1

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.


1

init=puede tomar cualquier ejecutable

init=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:

El control del trabajo se puede restaurar en el inicio de Busybox y en otros inits similares con un líder -en inittab:

tty3::respawn:-/bin/sh

Las inittabentradas más normales , que usan el inicio de sesión y mantienen los shells de desove si haces Ctrl + D son:

::respawn:/sbin/getty -L ttyS0 0 vt100

que usan el gettyejecutable, pero TODO: no he podido generarlos yo mismo sin Busybox init: getty start from command line?

Puede usar esta configuración para jugar con ella y llegar a las conclusiones anteriores.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.