La semana pasada se me acercó un amigo y me preguntó "Emi, me olvidé el password de root, ¿me ayudás a recuperarlo?" a lo que yo respondí: "no hay problema, sólo hace falta iniciar el sistema en single user mode". Muy bonito, pero del dicho al hecho hay mucho trecho.



Antes de iniciar en modo single user conviene hacer un par de pruebas básicas.

Primero se puede tratar de verificar si root no está logueado actualmente en alguna otra TTY (no es poco frecuente que suceda si se trata de un servidor, a veces queda alguna sesión "olvidada" por ahí). Ver la salida del comando w y alternar entre diferentes TTY utilizando las combinaciones de teclado Ctrl+Alt+F*.

Segundo, ver si el usuario actual (o algún otro usuario) tiene permiso para ejecutar sudo su -. Parece trivial, pero en la desesperación tal vez no nos damos cuenta que algún otro usuario tiene sudo. El comando sudo permite ejecutar comandos como superusuario, pero autenticando al usuario actual utilizando su propia contraseña (en lugar de utilizar la contraseña de root).

Si logramos acceder por alguno de estos dos métodos es posible resetear la contraseña de root ejecutando passwd, aunque también es posible volcar el contenido del archivo "/etc/shadow" y utilizar el famoso John the Ripper para tratar de determinar cual era la contraseña olvidada. Más adelante prometo escribir algún artículo dedicado a "John the Ripper".

¿Qué es el modo single user?

El modo single user es un modo en el cual un sistema operativo multiusario inicia en un único usuario privilegiado (superusuario) como si se tratase de un sistema operativo monousuario. Este modo se utiliza principalmente para tareas de mantenimiento de entornos multiusuario (para ejecutar tareas que requieren acceso exclusivo a los recursos, por ejemplo cuando se necesita ejecutar fsck sobre un disco compartido), o por razones de seguridad (ya que no se inician los servicios de red). En algunos sistemas (por ejemplo Linux) es posible cambiar una contraseña de root olvidada o perdida cambiando a modo single user, aunque no solicitar el password en tal circunstancia es considerado como una vulnerabilidad de seguridad.

Los sistemas operativos de la familia Unix proveen la funcionalidad single user mode a través de los runlevels estilo System V, a través de opciones del bootloader estilo BSD, o a través de otras opciones de booteo. Los runlevels se cambian utilizando el comando init. Los runlevels 1 ó S inician el sistema en modo single user. Aunque sin privilegios suficientes, es imposible cambiar el runlevel utilizando el comando init, por ello hace falta reiniciar el sistema y cambiar las opciones del bootloader durante el inicio, antes de que se ejecute el kernel.

¿Cómo iniciar Linux en single user mode?

Para iniciar en modo single user es necesario reiniciar el sistema y acceder al bootloader (LILO o GRUB). Si durante el inicio no se observa una pantalla de booteo de LILO o GRUB se puede intentar acceder presionando la combinación de teclas Ctrl+X.

Si se trata de LILO, sólo es necesario escribir el comando linux single (asumiendo que "linux" es la etiqueta del kernel que deseamos iniciar). Si se trata de GRUB, se debe presionar la tecla e ("edit") sobre la línea correspondiente al kernel que deseamos iniciar, posicionarse en la línea que comienza con "kernel" y presionar e nuevamente, agregar el comando single1) al final de la línea (dejando un espacio en blanco antes de insertar "single" ó "1"), presionar enter para finalizar la edición y finalmente b ("boot") para iniciar el sistema en modo single user.

Nota: en GRUB esta edición no es persistente, por lo que no hay que preocuparse por cometer errores. Lógicamente si se desea iniciar nuevamente en modo single user será necesario repetir el procedimiento.

El sistema inicia con una secuencia de booteo normal excepto que termina rápidamente dejando abierto un prompt bash (el prompt o command prompt es la secuencia de uno o más caracteres que se utiliza en la interfaz de la línea de comandos para indicar que el intérprete está listo para recibir órdenes, es decir comandos). Al finalizar con el caracter #, el prompt indica que se trata del usuario root (o superusuario).

Si en lugar de dejar un prompt de root se recibe un mensaje solicitando el password de root para realizar tareas de mantenimiento, significa que el sistema está configurado para solicitar el password de root cuando se ingresa a single user mode. En este caso se debe intentar un truco que consiste en reemplazar el proceso init con /bin/bash (el intérprete de comandos).

Si el sistema no solicita en password de root y termina dejando abierto el prompt bash, es posible resetear el password de root utilizando eel comando passwd. Si funciona significa que se ha podido cambiar la contraseña de root de forma exitosa. Ahora es posible reiniciar el sistema y continuar leyendo las últimas entradas en linuxito.com (o las últimas actualizaciones de Justin Beaver en facebook, lo que sea de mayor agrado). También sería útil pensar en configurar sudo para la próxima vez.

Si el comando passwd no funciona, puede que el sistema de archivos raíz (/) no esté montado con permiso de escritura (rw). Remontar el sistema de archivoz raíz de la siguiente forma:

mount -o remount,rw /

O también, suponiendo que el sistema de archivos raíz se encuentra en el dispositivo "/dev/sda2" (para determinar en qué dispositivo se encuentra es posible utilizar los comandos mount y fdisk -l, o volcar el contenido del archivo "/etc/fstab"):

mount -o remount,rw /dev/sda2

Puede que el comando mount reporte que el sistema de archivos raíz está montado rw a pesar de que no sea así, por lo tanto es conveniente probar de todos modos. Una vez remontado el sistema de archivos raíz utilizar el comando passwd nuevamente. Si es necesario especificar el tipo de sistema de archivos, utilizar la opción -t (por ejemplo si se trata de "ext4"):

mount -o remount,rw -t ext4 /dev/sda2

¿Qué hacer si el sistema solicita el password de root para pasar a single user mode?

Un truco simple es reemplazar init por "/bin/bash". Una vez que el kernel inicie en lugar de crear el proceso init abrirá una instancia de bash. Para ello es necesario ejecutar linux init=/bin/bash en LILO o agregar init=/bin/bash en la línea "kernel" de GRUB.

Debido a que este método de inicio termina en un prompt bash mucho antes que en modo single user, menor cantidad de subsistemas serán inicializados, menos dispositivos serán montados, etc. Tal vez sea necesario montar el resto de los filesystems (al menos los que sean necesarios) de forma manual (revisar el archivo "/etc/fstab" o ejecutar fdisk -l para listar las particiones disponibles). Muy posiblemente será necesario remontar el sistema de archivos raíz en modo rw antes de poder ejecutar passwd.

¿Qué hacer si el bootloader está protegido con contraseña?

A veces (sobre todo si se trata de un sistema que no nos pertenece o que no hemos instalado) el bootloader está protegido con contraseña, es decir que no se podrá ingresar en modo single user sin conocer la contraseña del bootloader.

En este este escenario la única alternativa es iniciar desde un medio removible, siempre que el hardware lo permita (permita bootear desde un medio removible).

Es posible utilizar un LiveCD, aunque algunas distribuciones modernas poseen un modo de recuperación del sistema (por ejemplo "linux rescue") en el mismo DVD de instalación. Cuando se utiliza el modo de recuperación generalmente es necesario ejecutar chroot antes de poder utilizar el comando passwd, ya que el sistema de archivos raíz suele quedar montado en otra rama del árbol, por ejemplo "/mnt/sysimage". El procedimiento es similar cuando se utiliza un LiveCD de otra distribución: primero se monta el dispositivo que contiene el sistema de archivos raíz en cualquier rama (en modo rw); luego se hace un chroot a esa rama; y finalmente se ejecuta passwd.

¿Y si el bootloader está protegido con contraseña y no es posible bootear desde un medio removible?

Si no se permite bootear desde un medio removible (porque no lo permite la configuración del hardware), tal vez la única alternativa sea remover el disco rígido y conectarlo a otro sistema. Luego desde este sistema se puede montar el sistema de archivos raíz y editar el archivo "/etc/shadow" para eliminar el password de root.

Para eliminar o borrar el password de root buscar la línea correspondiente a "root":

root:$1$xhzFdvur$I.8IJ.Py7sJ5oHJQk/dXs1:15049:0:99999:7:::

Luego vaciar la segunda columna, la cual corresponde al hash del password, debe quedar así:

root::15049:0:99999:7:::

De esta forma se permite autenticar al usuario root sin utilizar contraseña. Por supuesto se debe asignar inmediatamente un nuevo password a root cuando se reinicie el sistema.

¿Qué pasa cuando el disco rígido está encriptado?

Si el disco rígido está encriptado, por ejemplo utilizando LUKS (Linux Unified Key Setup), y no se posee la clave de encriptación, sólo queda hacer fuerza bruta (buena suerte en esa empresa).

Espero que les haya gustado y sirva para "salvar las papas" en alguna ocasión.


Tal vez pueda interesarte


Compartí este artículo