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 installodnf reinstall kernel - Editar
/etc/fstabsi 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.