Recuperar contraseñas en Linux

¿Olvidaste la contraseña de tu usuario o de root? No estás solo. Ocurre con más frecuencia de lo que parece, y Linux ofrece varios caminos para recuperar el acceso sin perder datos. En este articulo entinaré mostrarte una guia que cubre las distribuciones más habituales con comandos listos para copiar, explica cómo actuar si el disco está cifrado con LUKS y repasa las buenas prácticas de seguridad tras la recuperación.

⚠️ Advertencia legal y ética: estos procedimientos requieren acceso físico al equipo o a la consola de la máquina virtual. Realízalos únicamente en sistemas de tu propiedad o con permiso explícito del responsable. Aplicarlos en sistemas ajenos sin autorización puede ser constitutivo de delito.


Tabla comparativa rápida por distribución

Distribución Acceso al shell Parámetro GRUB Remontar raíz Nota clave
Ubuntu / Mint / Debian Menú recovery o editar GRUB init=/bin/bash mount -o remount,rw / Opción recovery mode disponible en GRUB
Fedora / RHEL / CentOS / AlmaLinux / Rocky Editar entrada GRUB rd.break mount -o remount,rw /sysroot + chroot /sysroot Reetiquetar SELinux con touch /.autorelabel
Arch Linux / Manjaro / EndeavourOS Editar entrada GRUB init=/bin/bash mount -o remount,rw / No hay menú recovery por defecto
openSUSE Leap / Tumbleweed Editar GRUB o Rescue System del instalador rd.break mount -o remount,rw /sysroot + chroot /sysroot Revisar AppArmor o SELinux según configuración
Kali Linux Igual que Debian/Ubuntu init=/bin/bash o recovery mount -o remount,rw / Basado en Debian; mismos pasos
Pop!_OS Editar GRUB o usar LiveUSB init=/bin/bash mount -o remount,rw / Basado en Ubuntu

Antes de empezar: requisitos y advertencias

Lo que necesitas

  • Acceso físico al equipo o a la consola de la VM. Estas operaciones de restauración no se pueden hacer en remoto.
  • Saber si tu disco está cifrado con LUKS (en ese caso, también necesitas la frase de cifrado).
  • Un LiveUSB del mismo sistema o de cualquier distribución Live como alternativa si GRUB no es accesible.

Disco cifrado con LUKS

LUKS es un sistema de cifrado de disco completo que protege tus datos incluso cuando la seguridad física está comprometida. Es el estándar para el cifrado de discos en Linux, ofreciendo un formato independiente de plataforma que proporciona gestión segura de claves, múltiples claves de usuario y compatibilidad entre distribuciones Linux. LUKS es el estándar de facto para el cifrado de discos en Linux y ofrece un impacto mínimo en el rendimiento.

Si el sistema usa cifrado de disco completo, el initramfs solicitará la frase de cifrado al arrancar. Sin esa frase no podrás montar la raíz ni cambiar ninguna contraseña. Este es precisamente el objetivo del cifrado: proteger el sistema ante acceso físico no autorizado.

Si no dispones de la frase:

  • Restaura desde una copia de seguridad.
  • Si no hay copia, la única opción es reinstalar el sistema operativo.

SELinux y AppArmor

En sistemas con SELinux activo (Fedora, RHEL, CentOS, AlmaLinux, Rocky Linux) es obligatorio crear el fichero /.autorelabel antes de reiniciar. Sin este paso, el sistema puede presentar fallos de autenticación o impedir que arranquen servicios correctamente tras el cambio de contraseña.

En openSUSE puede estar activo AppArmor o SELinux dependiendo de la instalación; compruébalo antes con aa-status o sestatus si tienes dudas.


Procedimiento genérico paso a paso

Este flujo es válido para la mayoría de distribuciones. Más adelante encontrarás las particularidades de cada una.

1. Mostrar el menú GRUB

Reinicia el equipo:

Si tienes varios sistemas operativos instalados en la misma computadora, tendrás activo el gestor GRUB y este se mostrará durante el arranque. Si solo tienes instalado una distribución Linux y durante su intalación indicaste que se ocultara GRUB, deberas serguir los siguientes pasos

Y, según el firmware:

  • BIOS/Legacy: mantén pulsada la tecla Shift durante el arranque.
  • UEFI: pulsa Esc repetidamente justo tras el POST, o en algunas distros simplemente espera a que aparezca el menú si hay varios sistemas instalados.

Si el menú GRUB está oculto con GRUB_TIMEOUT=0, edita /etc/default/grub desde un LiveUSB y cambia el valor a 5 o superior; luego ejecuta update-grub o grub2-mkconfig.

2. Seleccionar o editar la entrada del kernel

  • Si ves una opción Advanced options o recovery mode, selecciónala y pasa al paso 3B.
  • Si no, sitúate sobre la entrada principal del kernel y pulsa e para editar.

3. Obtener un shell root

Opción A — init=/bin/bash (Ubuntu, Debian, Kali, Arch, Manjaro)

Localiza la línea que comienza por linux y añade al final:

init=/bin/bash

Opción B — rd.break (Fedora, RHEL, CentOS, AlmaLinux, Rocky, openSUSE)

Localiza la línea linux y añade al final:

rd.break

4. Arrancar con la modificación

Pulsa Ctrl+X o F10 para iniciar con los parámetros modificados.

5. Remontar el sistema de ficheros en lectura/escritura

El sistema de ficheros monta en modo solo lectura por seguridad; es necesario remontarlo:

Para init=/bin/bash:

mount -o remount,rw /

Para rd.break (antes de hacer chroot):

mount -o remount,rw /sysroot
chroot /sysroot

6. Cambiar la contraseña

# Cambiar la contraseña de un usuario concreto
passwd nombre_de_usuario

# Cambiar la contraseña de root
passwd root

Escribe la nueva contraseña cuando se solicite y confírmala.

7. SELinux: reetiquetar antes de reiniciar (solo Fedora/RHEL/CentOS/AlmaLinux/Rocky/openSUSE con SELinux)

touch /.autorelabel
exit   # salir del chroot si aplica
exit   # salir del shell

El primer arranque tras el reetiquetado puede tardar varios minutos dependiendo del tamaño del sistema de ficheros.

8. Reiniciar

reboot -f
# o bien
exec /sbin/init

Procedimientos detallados por distribución

Ubuntu, Linux Mint y Debian

Método preferido: en el menú GRUB selecciona Advanced options for Ubuntu → entrada con (recovery mode) → en el menú de recuperación elige root – Drop to root shell prompt.

Método alternativo (editar GRUB):

  1. Pulsa e sobre la entrada del kernel.
  2. Añade init=/bin/bash al final de la línea linux.
  3. Pulsa Ctrl+X.
mount -o remount,rw /
passwd nombre_de_usuario   # opcional, si quieres cambiar un usuario concreto
passwd root
sync
reboot -f

Ubuntu no usa SELinux por defecto; no es necesario reetiquetar.


Fedora, RHEL, CentOS, AlmaLinux y Rocky Linux

Estas distribuciones usan SELinux en modo enforcing por defecto. Sigue este flujo al pie de la letra:

  1. Edita la entrada GRUB pulsando e.
  2. En la línea linux, elimina los parámetros rhgb quiet (opcional, para ver el arranque) y añade rd.break al final.
  3. Pulsa Ctrl+X.
# En el shell initramfs
mount -o remount,rw /sysroot
chroot /sysroot

passwd nombre_de_usuario   # si necesitas cambiar un usuario
passwd root

# Obligatorio para SELinux
touch /.autorelabel

exit   # salir del chroot
exit   # salir del initramfs

El sistema reetiquetará todos los contextos SELinux en el siguiente arranque. Sé paciente: puede tardar entre 2 y 10 minutos.


Arch Linux, Manjaro y EndeavourOS

Arch no incluye un menú recovery en GRUB por defecto.

  1. Edita la entrada GRUB pulsando e.
  2. Añade init=/bin/bash al final de la línea linux.
  3. Pulsa Ctrl+X.
mount -o remount,rw /
# Si /boot está en una partición separada, móntala también:
# mount /dev/sdaX /boot

passwd nombre_de_usuario
passwd root

# Forzar sincronización de buffers antes de reiniciar
sync
exec /sbin/init
# o bien: reboot -f

Si usas systemd-boot en lugar de GRUB (instalaciones recientes de Arch en UEFI), pulsa e en el menú de systemd-boot y añade init=/bin/bash al final de las opciones del kernel.


openSUSE Leap y Tumbleweed

Opción 1: editar GRUB

  1. Selecciona la entrada del kernel y pulsa e.
  2. Añade rd.break al final de la línea linux.
  3. Pulsa Ctrl+X.
mount -o remount,rw /sysroot
chroot /sysroot

passwd nombre_de_usuario
passwd root

touch /.autorelabel   # si SELinux está activo
exit
exit

Opción 2: arrancar desde el instalador de openSUSE

  1. Arranca desde el DVD/USB de instalación.
  2. Selecciona Rescue System.
  3. Sigue las instrucciones en pantalla para montar el sistema raíz y cambiar contraseñas.

Kali Linux

Kali está basado en Debian; el procedimiento es idéntico.

  1. Selecciona Advanced optionsrecovery mode en GRUB, o edita la entrada y añade init=/bin/bash.
mount -o remount,rw /
passwd nombre_de_usuario
passwd root
sync
reboot -f

Pop!_OS

Método preferido: usar el Recovery Mode integrado de Pop!_OS (Systemd‑boot).

  1. Enciende el equipo y mantén pulsada la tecla Espacio para abrir el menú de systemd‑boot.
  2. Selecciona Pop!_OS Recovery.
  3. Cuando cargue el entorno de recuperación, abre una terminal.
  4. Monta la partición raíz en modo lectura‑escritura:

bash

sudo mount -o remount,rw /
  1. Cambia la contraseña:

bash

passwd nombre_de_usuario   # opcional, para un usuario concreto
passwd root
sync
reboot

Método alternativo (editar entrada en systemd‑boot):

  1. En el menú de systemd‑boot, selecciona la entrada normal de Pop!_OS.
  2. Pulsa e para editar temporalmente los parámetros del kernel.
  3. En la línea que empieza por linux, añade al final:

Código

init=/bin/bash
  1. Arranca con Ctrl+X.

Una vez en la shell:

bash

mount -o remount,rw /
passwd nombre_de_usuario
passwd root
sync
reboot -f

Pop!_OS tampoco usa SELinux por defecto, así que no es necesario reetiquetar.


Recuperación desde LiveUSB o LiveCD

Si no puedes editar GRUB (por ejemplo, GRUB está protegido con contraseña, el sistema no arranca o el menú está oculto), usa un LiveUSB:

Sistema sin cifrado

# 1. Identificar la partición raíz (busca ext4, btrfs, xfs, etc.)
lsblk -f
fdisk -l

# 2. Montar la partición raíz (ajusta /dev/sda2 a tu caso)
sudo mount /dev/sda2 /mnt

# 3. Montar los sistemas de ficheros virtuales necesarios para chroot
sudo mount --bind /dev  /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys
sudo mount --bind /run  /mnt/run   # necesario en algunos sistemas

# 4. Entrar en el chroot
sudo chroot /mnt

# 5. Cambiar contraseñas
passwd nombre_de_usuario
passwd root

# 6. Salir y reiniciar
exit
sudo reboot

Sistema con cifrado LUKS

# 1. Abrir el contenedor LUKS (te pedirá la frase de cifrado)
sudo cryptsetup luksOpen /dev/sdaX cryptroot

# 2. Montar el volumen descifrado
sudo mount /dev/mapper/cryptroot /mnt

# 3. Si usas LVM dentro de LUKS, activa los volúmenes
sudo vgchange -ay
sudo mount /dev/nombre_vg/nombre_lv /mnt

# 4. Continuar con el chroot como en el caso sin cifrado
sudo mount --bind /dev  /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys
sudo chroot /mnt
passwd nombre_de_usuario
passwd root
exit
sudo reboot

Proteger GRUB con contraseña

Para evitar que cualquier persona con acceso físico pueda editar las entradas de GRUB y obtener un shell root, protégelo con contraseña:

# Generar el hash de la contraseña
grub-mkpasswd-pbkdf2

# Editar /etc/grub.d/40_custom y añadir:
set superusers="admin"
password_pbkdf2 admin <hash_generado>

# Aplicar los cambios
sudo update-grub          # Debian/Ubuntu/Kali
sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # Fedora/RHEL/CentOS
sudo grub2-mkconfig -o /boot/grub/grub.cfg   # Arch/openSUSE

Con esta protección, editar GRUB requerirá la contraseña que hayas definido. Combínalo con cifrado LUKS para una protección completa.


Buenas prácticas tras recuperar el acceso

  • Cambia todas las contraseñas por otras fuertes y únicas (mínimo 16 caracteres con letras, números y símbolos).
  • Habilita cifrado de disco completo (LUKS) si aún no está activo; es la protección más efectiva contra acceso físico no autorizado.
  • Protege GRUB con contraseña si el equipo está en un entorno físico no seguro (oficina compartida, portátil de viaje, etc.).
  • Revisa cuentas con privilegios para asegurarte de que solo los usuarios correctos tienen acceso a sudo o wheel:
getent group sudo    # Debian/Ubuntu/Kali
getent group wheel   # Fedora/RHEL/Arch/openSUSE
  • Audita los logs para detectar accesos sospechosos anteriores:
last               # últimos inicios de sesión
lastb              # intentos fallidos de autenticación
journalctl -p err  # errores del sistema
grep "sudo" /var/log/auth.log   # uso de sudo (Debian/Ubuntu)
grep "sudo" /var/log/secure     # uso de sudo (Fedora/RHEL)
  • Actualiza el sistema inmediatamente tras recuperar el acceso para cerrar posibles vulnerabilidades.

Preguntas frecuentes

¿Puedo recuperar la contraseña antigua? No. Linux almacena hashes irreversibles (SHA-512, bcrypt o yescrypt) en /etc/shadow. No es posible revertir el hash a la contraseña original; solo puedes establecer una nueva.

¿Necesito la contraseña de root para cambiar otra contraseña? No si arrancas en modo recovery o usas un LiveUSB. Estos métodos te proporcionan un shell con privilegios de root sin necesidad de conocer ninguna contraseña actual.

¿Qué pasa si no reetiqueto SELinux en Fedora/RHEL? El sistema puede presentar fallos de autenticación (el usuario no puede iniciar sesión aunque la contraseña sea correcta), servicios que no arrancan o errores de permisos en ficheros del sistema.

¿Funciona este método en servidores remotos sin acceso físico? No directamente. Sin acceso físico o a la consola de la VM (KVM, iDRAC, iLO, VNC de tu proveedor cloud), no puedes modificar GRUB ni arrancar desde un LiveUSB. En ese caso, contacta con el soporte de tu proveedor o usa su consola de recuperación si la ofrece.

¿Es seguro mi sistema si alguien puede hacer esto? Un sistema sin cifrado de disco y con acceso físico es vulnerable a este tipo de acceso. El cifrado completo del disco con LUKS (y una frase robusta) es la única defensa real, ya que sin la frase de cifrado el contenido del disco es ilegible.

¿Qué diferencia hay entre init=/bin/bash y rd.break? init=/bin/bash sustituye el proceso de inicio (systemd/init) por un shell bash directamente, con el sistema de ficheros raíz montado. rd.break interrumpe el arranque en el initramfs, antes de que se monte el sistema raíz real, y es el método preferido en distros con SELinux porque el contexto de seguridad se preserva correctamente al hacer chroot.


Recuperar el acceso a un sistema Linux tras olvidar una contraseña es un proceso perfectamente manejable si tienes acceso físico al equipo. Los métodos descritos aquí (editar GRUB, usar el modo recovery o arrancar desde un LiveUSB) cubren todas las distribuciones habituales y no requieren herramientas externas especiales.

La contrapartida es que estos métodos demuestran que un sistema Linux sin cifrado de disco es vulnerable ante quien tenga acceso físico. Si la seguridad es una prioridad, habilita LUKS, protege GRUB con contraseña y mantén el acceso físico al equipo bajo control.

Usa estas técnicas con responsabilidad, solo en sistemas propios o con permiso explícito, y aprovecha el proceso de recuperación para mejorar la postura de seguridad del sistema.