--- title: "Cómo cifrar un disco con LUKS en Ubuntu 24.04" description: "Cifra un disco secundario con LUKS2 y cryptsetup en Ubuntu 24.04, móntalo al arrancar con crypttab, gestiona claves y guarda una copia de la cabecera LUKS." category: "Seguridad del Servidor" language: es source: https://cubepath.com/es/docs/seguridad-del-servidor/cifrado-de-disco-con-luks updated: 2026-09-25 --- # Cómo cifrar un disco con LUKS en Ubuntu 24.04 LUKS (Linux Unified Key Setup) es el formato estándar de cifrado de disco en Linux. Cifra un dispositivo de bloques completo y guarda en una cabecera las ranuras de claves (keyslots), de modo que puedes abrir el mismo volumen con varias frases de contraseña o archivos de clave y cambiarlas sin volver a cifrar los datos. En este tutorial cifrarás un disco secundario con LUKS2 en Ubuntu 24.04 usando `cryptsetup`, crearás un sistema de archivos, configurarás el desbloqueo y montaje automático al arrancar, y aprenderás a gestionar claves y a hacer copia de la cabecera. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo`. - Un segundo disco o volumen vacío conectado al servidor. En esta guía se usa `/dev/vdb`; el nombre en tu sistema puede ser distinto. - Una copia de seguridad de cualquier dato que haya en ese disco: **formatearlo con LUKS borra todo su contenido**. > Nota: el cifrado de disco protege los datos en reposo, por ejemplo si un disco se retira, se reutiliza o se copia sin el servidor en marcha. Con el volumen abierto, los datos son accesibles para cualquiera con acceso al sistema, así que LUKS complementa, no sustituye, el control de acceso y las copias de seguridad. ## Paso 1: Instalar cryptsetup e identificar el disco Instala `cryptsetup`, la herramienta que crea y gestiona volúmenes LUKS: ```bash sudo apt update sudo apt install cryptsetup ``` Comprueba la versión instalada: ```bash cryptsetup --version ``` ```output cryptsetup 2.7.0 ``` Lista los discos para identificar el que vas a cifrar. Asegúrate de que no tiene particiones montadas ni está en uso: ```bash lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS ``` ```output NAME SIZE TYPE FSTYPE MOUNTPOINTS vda 40G disk ├─vda1 39G part ext4 / ├─vda14 4M part ├─vda15 106M part vfat /boot/efi vdb 50G disk ``` En este ejemplo, `vdb` es el disco secundario vacío. Revisa dos veces el nombre antes de seguir: si te equivocas de dispositivo, perderás datos. Si quieres saber cuánto rendimiento vas a perder, `cryptsetup benchmark` mide la velocidad de cada algoritmo en tu CPU. Con aceleración AES-NI, `aes-xts` suele superar con holgura la velocidad del disco: ```bash cryptsetup benchmark -c aes-xts-plain64 -s 512 ``` ## Paso 2: Crear el volumen LUKS `luksFormat` escribe la cabecera LUKS y define la primera frase de contraseña. En Ubuntu 24.04 los valores por defecto ya son adecuados: formato LUKS2, cifrado `aes-xts-plain64` con clave de 512 bits y derivación de clave `argon2id`. Aun así, indicar `--type luks2` deja claro qué formato estás usando: ```bash sudo cryptsetup luksFormat --type luks2 /dev/vdb ``` ```output WARNING! ======== This will overwrite data on /dev/vdb irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/vdb: Verify passphrase: ``` Escribe `YES` en mayúsculas y elige una frase de contraseña larga (varias palabras al azar funcionan bien). Guárdala en un gestor de contraseñas: **si la pierdes y no tienes otra clave, los datos son irrecuperables**. Comprueba que el dispositivo es ahora un volumen LUKS: ```bash sudo cryptsetup luksDump /dev/vdb ``` ```output LUKS header information Version: 2 ... Keyslots: 0: luks2 Key: 512 bits Priority: normal Cipher: aes-xts-plain64 Cipher key: 512 bits PBKDF: argon2id ... ``` ## Paso 3: Abrir el volumen y crear el sistema de archivos Para usar el volumen hay que abrirlo. `cryptsetup open` pide la frase de contraseña y crea un dispositivo descifrado en `/dev/mapper/` con el nombre que elijas, en este caso `datos`: ```bash sudo cryptsetup open /dev/vdb datos ``` Comprueba su estado: ```bash sudo cryptsetup status datos ``` ```output /dev/mapper/datos is active. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/vdb sector size: 512 offset: 32768 sectors size: 104824832 sectors mode: read/write ``` A partir de aquí, `/dev/mapper/datos` se comporta como un disco normal. Todo lo que escribas en él se cifra antes de llegar a `/dev/vdb`. Crea un sistema de archivos ext4 y móntalo: ```bash sudo mkfs.ext4 /dev/mapper/datos sudo mkdir -p /mnt/datos sudo mount /dev/mapper/datos /mnt/datos ``` Verifica el montaje escribiendo un archivo de prueba: ```bash echo "prueba de cifrado" | sudo tee /mnt/datos/prueba.txt df -h /mnt/datos ``` ```output prueba de cifrado Filesystem Size Used Avail Use% Mounted on /dev/mapper/datos 49G 24K 47G 1% /mnt/datos ``` ## Paso 4: Añadir un archivo de clave Para que el servidor pueda desbloquear el volumen al arrancar sin que nadie escriba la frase de contraseña, añade un archivo de clave en una segunda ranura. La frase de contraseña del paso 2 sigue siendo válida y te servirá como clave de recuperación. Crea un archivo de 4 KiB con datos aleatorios en un directorio solo accesible por root: ```bash sudo install -d -m 0700 /etc/luks-keys sudo dd if=/dev/urandom of=/etc/luks-keys/datos.key bs=512 count=8 sudo chmod 0400 /etc/luks-keys/datos.key ``` Añádelo al volumen. `cryptsetup` te pedirá una clave existente, es decir, tu frase de contraseña: ```bash sudo cryptsetup luksAddKey /dev/vdb /etc/luks-keys/datos.key ``` Comprueba que ahora hay dos ranuras ocupadas y que el archivo abre el volumen. `--test-passphrase` verifica la clave sin abrir nada: ```bash sudo cryptsetup luksDump /dev/vdb | grep -E '^\s+[0-9]+: luks2' sudo cryptsetup open --test-passphrase --key-file /etc/luks-keys/datos.key /dev/vdb && echo "La clave funciona" ``` ```output 0: luks2 1: luks2 La clave funciona ``` > Importante: el archivo de clave está en el disco del sistema sin cifrar. Esto protege el volumen de datos si se copia o se retira por separado, pero no si alguien obtiene también el disco del sistema. Si necesitas que nadie pueda abrir el volumen sin intervención humana, omite este paso y usa la opción `noauto` descrita en el paso 5. ## Paso 5: Desbloquear y montar automáticamente al arrancar Ubuntu lee `/etc/crypttab` al arrancar para abrir volúmenes cifrados y después `/etc/fstab` para montarlos. Usa el UUID del dispositivo LUKS en lugar de `/dev/vdb`, porque los nombres de disco pueden cambiar: ```bash sudo cryptsetup luksUUID /dev/vdb ``` ```output 4c1b2f6e-8a3d-4f7a-9c21-5e0d7b3a9f12 ``` Edita `/etc/crypttab`: ```bash sudo nano /etc/crypttab ``` Añade esta línea, sustituyendo el UUID por el tuyo: ```text datos UUID=4c1b2f6e-8a3d-4f7a-9c21-5e0d7b3a9f12 /etc/luks-keys/datos.key luks,discard ``` Los campos son: nombre del dispositivo en `/dev/mapper/`, dispositivo LUKS, archivo de clave y opciones. `discard` permite que las órdenes TRIM lleguen al almacenamiento subyacente, lo que conviene en SSD y almacenamiento virtualizado. A cambio, revela qué bloques están libres; si eso es un problema para ti, quítala. Edita `/etc/fstab`: ```bash sudo nano /etc/fstab ``` Añade la línea de montaje: ```text /dev/mapper/datos /mnt/datos ext4 defaults,nofail 0 2 ``` `nofail` evita que el servidor se quede detenido en el arranque si el volumen no se puede abrir, algo importante en un servidor remoto. Si prefieres no guardar el archivo de clave y abrir el volumen a mano, pon `none` en el tercer campo de `crypttab` y `luks,noauto` como opciones, y añade `noauto` a las opciones de `fstab`. Después de cada arranque abrirás y montarás el volumen tú mismo con `sudo cryptsetup open /dev/vdb datos` y `sudo mount /mnt/datos`. Prueba la configuración sin reiniciar. Desmonta y cierra el volumen, recarga systemd para que genere las unidades a partir de `crypttab` y ábrelo con ellas: ```bash sudo umount /mnt/datos sudo cryptsetup close datos sudo systemctl daemon-reload sudo systemctl start systemd-cryptsetup@datos.service sudo mount -a ``` ```bash cat /mnt/datos/prueba.txt ``` ```output prueba de cifrado ``` Por último, reinicia el servidor y comprueba que el volumen se monta solo: ```bash sudo reboot ``` ```bash findmnt /mnt/datos ``` ```output TARGET SOURCE FSTYPE OPTIONS /mnt/datos /dev/mapper/datos ext4 rw,relatime ``` ## Paso 6: Hacer copia de la cabecera LUKS La cabecera contiene las ranuras de claves. Si se corrompe, ninguna clave podrá abrir el volumen y los datos se pierden. Haz una copia ahora y guárdala **fuera del servidor**, junto a tus copias de seguridad: ```bash sudo cryptsetup luksHeaderBackup /dev/vdb --header-backup-file /root/vdb-luks-header.img sudo chmod 0400 /root/vdb-luks-header.img ``` Descárgala a un lugar seguro y bórrala del servidor. Ten en cuenta que esa copia, junto con cualquier clave que fuera válida cuando la hiciste, permite abrir el volumen: protégela como protegerías la frase de contraseña. Si más adelante eliminas una clave, haz una copia nueva y destruye la antigua. Para restaurarla en caso de corrupción: ```bash sudo cryptsetup luksHeaderRestore /dev/vdb --header-backup-file vdb-luks-header.img ``` ## Paso 7: Cambiar y revocar claves Para cambiar una frase de contraseña existente, `luksChangeKey` pide la actual y la nueva, y sustituye la ranura correspondiente: ```bash sudo cryptsetup luksChangeKey /dev/vdb ``` Para revocar una clave concreta, `luksRemoveKey` pide la clave que quieres eliminar. Por ejemplo, para retirar el archivo de clave: ```bash sudo cryptsetup luksRemoveKey /dev/vdb /etc/luks-keys/datos.key ``` Si conoces el número de ranura pero no la clave (por ejemplo, la de un antiguo administrador), usa `luksKillSlot`, que pide una clave diferente que siga siendo válida: ```bash sudo cryptsetup luksKillSlot /dev/vdb 1 ``` > Advertencia: no elimines nunca la última clave válida. Antes de revocar una ranura, comprueba con `luksDump` que quedará al menos otra y que la conoces. ## Solución de problemas - **`Device datos is still in use`** al cerrar: el sistema de archivos sigue montado o un proceso lo usa. Desmonta con `sudo umount /mnt/datos` y, si falla, busca el proceso con `sudo lsof +f -- /mnt/datos`. - **`No key available with this passphrase`**: la frase o el archivo de clave no coinciden con ninguna ranura. Comprueba la distribución del teclado y, con un archivo de clave, que no se haya modificado. - **El volumen no se abre al arrancar**: revisa `sudo journalctl -b -u systemd-cryptsetup@datos.service`. Los fallos habituales son un UUID mal copiado en `crypttab` o permisos incorrectos en el archivo de clave. - **El servidor tarda en arrancar o entra en modo de emergencia**: falta `nofail` en `fstab`. Accede por consola, añádela y reinicia. ## Conclusión Has cifrado un disco con LUKS2, creado un sistema de archivos sobre él, configurado su apertura y montaje automáticos con `crypttab` y `fstab`, guardado una copia de la cabecera y aprendido a rotar y revocar claves. Como siguientes pasos, puedes programar copias de seguridad cifradas de `/mnt/datos` a otro servidor, mover a este volumen los datos sensibles de tus aplicaciones (bases de datos, subidas de usuarios) y documentar dónde se guardan la frase de recuperación y la copia de la cabecera.