Creacion de un pendrive para descifrar un equipo con la partición raiz cifrada
Preparar el archivo de clave
Genera una clave aleatoria y guárdala en un archivo (ej. cryptkey.key):
sudo dd if=/dev/urandom of=/root/cryptkey.key bs=512 count=4
sudo chmod 600 /root/cryptkey.keyAgregar la clave al volumen LUKS
Añade el archivo como clave adicional al disco cifrado (ej. /dev/nvme0n1p3):
sudo cryptsetup luksAddKey /dev/nvme0n1p3 /root/cryptkey.keyNota: Reemplaza
/dev/nvme0n1p3con tu dispositivo correcto (ver conlsblk).
Configurar el initramfs
Crea el script que buscará la clave en el USB:
sudo nano /etc/initramfs-tools/scripts/local-top/cryptusbContenido del script:
#!/bin/sh
# fichero en /etc/initramfs-tools/scripts/local-top/unlockusb
PREREQ=""
prereqs() { echo "$PREREQ"; }
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /scripts/functions
# UUIDs
USB_UUID="01a5fc97-70dd-40e7-b436-4f29f2cff5e3"
CRYPT_UUID="60d547fd-88c4-43f2-8ae3-d767039ba9c6"
USB_MOUNTPOINT="/usbkey"
KEYFILE="$USB_MOUNTPOINT/cryptkey.key"
CRYPT_NAME="root-c"
# Esperar a que aparezca el dispositivo USB (máx 10s)
echo "Esperando el dispositivo USB con UUID=$USB_UUID..."
for i in $(seq 1 10); do
if blkid | grep -q "$USB_UUID"; then
break
fi
sleep 1
done
# Montar el USB en solo lectura
mkdir -p $USB_MOUNTPOINT
mount -o ro -t ext4 UUID=$USB_UUID $USB_MOUNTPOINT 2>/dev/null
if [ -f "$KEYFILE" ]; then
echo "Clave encontrada en $KEYFILE, intentando desbloquear el volumen..."
cryptsetup luksOpen UUID=$CRYPT_UUID $CRYPT_NAME --key-file "$KEYFILE"
STATUS=$?
if [ $STATUS -eq 0 ]; then
echo "Volumen LUKS desbloqueado correctamente usando la clave del USB."
umount $USB_MOUNTPOINT
exit 0
else
echo "Error al desbloquear el volumen con la clave del USB."
fi
else
echo "No se encontró el archivo de clave $KEYFILE en el USB."
fi
# Si falla, desmontar y continuar con método interactivo
umount $USB_MOUNTPOINT 2>/dev/null
echo "Fallo el desbloqueo automático. Se pedirá la contraseña manualmente."
exit 0Hazlo ejecutable:
sudo chmod +x /etc/initramfs-tools/scripts/local-top/unlockusb5. Configurar crypttab
Edita /etc/crypttab para usar la clave externa como respaldo:
# Ejemplo (ajusta "nvme0n1p3_crypt" a tu nombre de mapeo LUKS):
root-c UUID=60d547fd-88c4-43f2-8ae3-d767039ba9c6 none luks,discard6. Preparar el USB
Copia la clave al USB:
sudo cp /root/cryptkey.key /media/usb/ # Monta el USB antes de copiar7. Regenerar initramfs
Actualiza la imagen initramfs:
sudo update-initramfs -u -k all8. Probar el arranque
Reinicia y verifica que el sistema lea la clave desde el USB:
sudo rebootNotas importantes:
Etiqueta del USB: Asegúrate de que la etiqueta del USB coincida con el script.
Respaldos: Guarda una copia de la clave y la contraseña por si falla el USB.
Seguridad: El USB debe estar conectado solo durante el arranque.
Si encuentras errores, depura con:
sudo lsblk -f # Verificar etiquetas y particiones
dmesg | grep -i crypto # Buscar errores de descifrado