Modo rescate, chroot y recuperación de contraseñas

Introducción

Cuando un sistema no arranca correctamente, la contraseña de root se ha perdido o hay que reparar ficheros dañados, es necesario intervenir antes de que el sistema llegue al estado operativo normal. Para ello se usan el modo rescate, el modo de emergencia y la técnica chroot.

Modo rescate y modo de emergencia

Ambos modos arrancan el sistema con los servicios mínimos y dan acceso a un shell de root sin necesidad de contraseña (en la mayoría de distribuciones).

Diferencias:

  • rescue.target: monta todos los sistemas de ficheros locales y activa algunos servicios básicos. Es el equivalente al runlevel 1 clásico.
  • emergency.target: mínimo absoluto. Solo monta el sistema de ficheros raíz en modo solo lectura. Ni siquiera ejecuta los scripts de sysinit.target. Útil cuando el sistema de ficheros raíz está dañado.

Activar desde GRUB (temporal, solo para ese arranque):

En el menú de GRUB, pulsar e sobre la entrada del kernel, localizar la línea que empieza por linux y añadir al final:


systemd.unit=rescue.target        ← modo rescate
systemd.unit=emergency.target     ← modo emergencia
          

Pulsar Ctrl+X o F10 para arrancar.

Activar en la sesión actual (sistema ya arrancado):


# systemctl isolate rescue.target
# systemctl isolate emergency.target
          

Recuperación de la contraseña de root

Si no se conoce la contraseña de root y se tiene acceso físico al servidor, es posible recuperarla modificando los parámetros del kernel en GRUB para obtener un shell antes de que el sistema pida autenticación.

Método 1 — init=/bin/bash (control total, sin systemd)

Añadir al final de la línea linux en GRUB:


init=/bin/bash
          

El kernel arranca y lanza directamente /bin/bash como PID 1, sin systemd ni ningún servicio. El sistema de ficheros raíz estará montado en solo lectura. Hay que remontarlo en escritura para poder cambiar la contraseña:


mount -o remount,rw /
passwd root
          

Después sincronizar y reiniciar:


sync
exec /sbin/init
          

Método 2 — rd.break (con initramfs, antes de montar el sistema raíz)

Añadir al final de la línea linux en GRUB (Red Hat / Fedora):


rd.break
          

El sistema se detiene en initramfs, antes de hacer el switch_root al sistema real. El sistema raíz real está montado en /sysroot en solo lectura.


mount -o remount,rw /sysroot     # remontar en escritura
chroot /sysroot                  # entrar en el sistema real
passwd root                      # cambiar contraseña
touch /.autorelabel              # necesario en sistemas con SELinux
exit
exit                             # el sistema reinicia
          

chroot — Cambiar la raíz del sistema

chroot (change root) cambia el directorio raíz aparente del proceso actual y sus hijos. Todo lo que haga ese proceso verá el directorio indicado como si fuera /. Es la técnica fundamental para intervenir en un sistema instalado arrancando desde un Live CD o desde initramfs.

Caso de uso típico: reparar un sistema desde Live CD

Si el sistema no arranca, se puede arrancar desde un Live CD/USB de la misma arquitectura, montar las particiones del sistema dañado y hacer chroot en él para ejecutar comandos como si estuviéramos dentro del sistema real.


# 1. Identificar las particiones del sistema instalado
lsblk
fdisk -l

# 2. Montar el sistema de ficheros raíz
mount /dev/sda1 /mnt

# 3. Montar las particiones adicionales si existen
mount /dev/sda2 /mnt/boot         # partición /boot separada
mount /dev/sda3 /mnt/boot/efi     # partición EFI (UEFI)

# 4. Montar los pseudosistemas de ficheros necesarios
mount --bind /dev  /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys  /mnt/sys

# 5. Entrar en el entorno chroot
chroot /mnt

# Ahora estamos "dentro" del sistema instalado
# Podemos ejecutar: passwd root, grub-install, update-grub, apt, dnf...

# 6. Al terminar, salir y desmontar
exit
umount -R /mnt
          

Usos habituales de chroot tras montar el sistema:

  • Cambiar la contraseña de root: passwd root
  • Reinstalar GRUB: grub-install /dev/sda && update-grub
  • Reparar paquetes: apt --fix-broken install o dnf reinstall kernel
  • Editar /etc/fstab si hay un error que impide el montaje
  • Restaurar un fichero de configuración dañado

Nota sobre SELinux:

En sistemas Red Hat/Fedora con SELinux, después de cambiar la contraseña o modificar ficheros críticos desde fuera del sistema, es obligatorio forzar un re-etiquetado en el próximo arranque:


touch /.autorelabel
          

Sin esto, SELinux puede bloquear el acceso a los ficheros modificados porque sus etiquetas de contexto de seguridad no coinciden con las esperadas.

El acceso físico a un servidor equivale a acceso root: cualquiera con acceso a la consola puede recuperar o resetear la contraseña. Proteger el GRUB con contraseña y el BIOS/UEFI con PIN es la contramedida estándar en entornos que lo requieran.

Comandos de apagado y reinicio: shutdown, reboot, halt, poweroff

Índice de la sección

Índice del curso