La seguridad no solo depende de controlar accesos y permisos; también es fundamental proteger los datos si el medio de almacenamiento cae en manos equivocadas (robo, pérdida, decomiso).
26.1. Introducción al cifrado de datos en reposo
El cifrado de datos en reposo garantiza que la información sea ilegible sin una clave secreta, incluso si se extrae el disco.
Linux ofrece un potente subsistema de cifrado a nivel de bloques llamado dm-crypt, integrado en el kernel a través del mapeador de dispositivos (Device Mapper). Sobre dm-crypt se construye LUKS (Linux Unified Key Setup), un formato estándar que facilita la gestión de claves, múltiples contraseñas y metadatos.
En este capítulo aprenderás a:
- Crear particiones cifradas con LUKS.
- Abrir, montar, desmontar y cerrar dispositivos cifrados.
- Configurar el montaje automático mediante
/etc/fstaby archivos de claves. - Cifrar el espacio de intercambio (swap), tanto particiones como archivos.
- Aplicar buenas prácticas de seguridad.
26.2. Conceptos y herramientas
26.2.1. dm-crypt y LUKS
- dm-crypt: módulo del kernel que proporciona cifrado transparente de dispositivos de bloque.
- LUKS: formato en disco que almacena metadatos (algoritmo, claves, UUID) y permite múltiples claves de acceso. Es el estándar de facto.
- cryptsetup: herramienta de espacio de usuario para gestionar dispositivos LUKS y dm-crypt.
26.2.2. Dispositivos mapeados
Cuando se abre un dispositivo LUKS, se crea un dispositivo virtual en /dev/mapper/ (ej. /dev/mapper/mi_cifrado). Todas las operaciones se realizan sobre este dispositivo mapeado, que descifra y cifra los datos sobre la marcha.
26.2.3. Instalación de cryptsetup
Si no está instalado:
sudo apt install cryptsetup # Debian/Ubuntu
sudo yum install cryptsetup # RHEL/CentOS
26.3. Creación de un sistema de archivos cifrado con LUKS
26.3.1. Paso 1: Preparar la partición
Supongamos que queremos cifrar la partición /dev/sdb1. Primero, verificar que no está montada y que no tiene datos importantes (se van a sobrescribir).
26.3.2. Paso 2: Formatear con LUKS
sudo cryptsetup luksFormat /dev/sdb1
Se pedirá confirmación (escribir YES) y una frase de contraseña (passphrase). Esta frase se puede cambiar después y se pueden añadir múltiples frases.
Opciones útiles:
--cipher aes-xts-plain64: algoritmo por defecto (AES-XTS).--key-size 512: tamaño de clave (depende del algoritmo).--hash sha256: hash para derivar la clave.--iter-time 2000: milisegundos para la derivación de clave (anti fuerza bruta).
26.3.3. Paso 3: Abrir el dispositivo LUKS
sudo cryptsetup luksOpen /dev/sdb1 mi_cifrado
Esto crea /dev/mapper/mi_cifrado. Se pide la passphrase.
26.3.4. Paso 4: Crear un sistema de archivos y montar
sudo mkfs.ext4 /dev/mapper/mi_cifrado
sudo mkdir -p /mnt/cifrado
sudo mount /dev/mapper/mi_cifrado /mnt/cifrado
Ahora puedes usar /mnt/cifrado como cualquier directorio, pero los datos se cifran automáticamente al escribir en disco.
26.4. Desmontar y cerrar el dispositivo
Al terminar de trabajar, se debe desmontar y cerrar el dispositivo mapeado para que los datos queden inaccesibles.
sudo umount /mnt/cifrado
sudo cryptsetup luksClose mi_cifrado
Luego de cerrar, el dispositivo /dev/mapper/mi_cifrado desaparece y los datos quedan cifrados en /dev/sdb1.
26.5. Configuración para montaje automático
Para montar el sistema de archivos cifrado en el arranque, se necesitan dos cosas:
- Que el dispositivo LUKS se abra automáticamente (normalmente pidiendo la passphrase durante el arranque).
- Una entrada en
/etc/fstabpara montar el dispositivo mapeado.
26.5.1. Archivo /etc/crypttab
El archivo /etc/crypttab define los dispositivos cifrados que deben abrirse durante el arranque. Formato:
nombre_mapeado dispositivo_origen clave opciones
Ejemplo:
mi_cifrado /dev/sdb1 none luks
noneindica que se pedirá la passphrase interactivamente durante el arranque.- También se puede especificar un archivo de clave, por ejemplo
/etc/luks-keys/mi_cifrado.key.
Opciones comunes: luks, timeout=0, noauto, discard, nofail.
26.5.2. Entrada en /etc/fstab
Una vez abierto el dispositivo mapeado, se monta con fstab:
/dev/mapper/mi_cifrado /mnt/cifrado ext4 defaults 0 2
Con estas dos configuraciones, el sistema pedirá la passphrase al arrancar y montará automáticamente.
26.5.3. Usar un archivo de claves
Para evitar pedir la passphrase en cada arranque (por ejemplo, en servidores), se puede usar un archivo de claves almacenado en un lugar seguro (ej. en un pendrive o en el initramfs, aunque este último reduce seguridad).
Crear clave aleatoria:
sudo dd if=/dev/urandom of=/etc/luks-keys/mi_cifrado.key bs=4096 count=1
sudo chmod 400 /etc/luks-keys/mi_cifrado.key
Añadir la clave al dispositivo LUKS:
sudo cryptsetup luksAddKey /dev/sdb1 /etc/luks-keys/mi_cifrado.key
Luego en /etc/crypttab:
mi_cifrado /dev/sdb1 /etc/luks-keys/mi_cifrado.key luks
Precaución: si el archivo de clave está en el mismo disco y el sistema arranca, un atacante con acceso físico podría leerlo. Es mejor guardarlo en un medio externo o cifrar el sistema completo.
26.6. Cifrado del espacio de intercambio (swap)
El swap puede contener datos sensibles (contraseñas, claves) que permanecen en disco. Es esencial cifrarlo, especialmente en portátiles o servidores con datos críticos.
26.6.1. Cifrado de una partición swap
- Primero, desactivar el swap existente si lo hay:
sudo swapoff /dev/sdb2
- Formatear la partición con LUKS:
sudo cryptsetup luksFormat /dev/sdb2
- Abrir el dispositivo:
sudo cryptsetup luksOpen /dev/sdb2 swap_cifrado
- Crear el área de swap en el dispositivo mapeado:
sudo mkswap /dev/mapper/swap_cifrado
- Activar el swap:
sudo swapon /dev/mapper/swap_cifrado
- Para persistencia, añadir a
/etc/crypttab:
swap_cifrado /dev/sdb2 none luks
Y en /etc/fstab:
/dev/mapper/swap_cifrado none swap sw 0 0
26.6.2. Cifrado de un archivo swap
Alternativa sin partición dedicada:
- Crear un archivo swap cifrado con dd y LUKS:
sudo dd if=/dev/zero of=/swapfile bs=1M count=512
sudo cryptsetup luksFormat /swapfile
sudo cryptsetup luksOpen /swapfile swapfile_cifrado
sudo mkswap /dev/mapper/swapfile_cifrado
- Activar:
sudo swapon /dev/mapper/swapfile_cifrado
- Para persistencia, añadir a
/etc/crypttab:
swapfile_cifrado /swapfile none luks
Y en fstab:
/dev/mapper/swapfile_cifrado none swap sw 0 0
Nota: En algunas distribuciones, el swap cifrado se maneja con el paquete cryptsetup y scripts especiales en el initramfs. Para el examen, basta con entender el flujo.
26.7. Buenas prácticas de seguridad
- Passphrase robusta: usar frases largas y complejas.
- Almacenamiento seguro de claves: si se usan archivos de claves, protegerlos con permisos
400y colocarlos en un medio separado o en un sistema de archivos cifrado. - Cifrado completo del sistema: en entornos críticos, cifrar todas las particiones, incluyendo
/,/home,/var,/tmpy swap. - Desactivar hibernación si el swap no está cifrado, o asegurar su cifrado.
- Actualizar initramfs después de modificar
/etc/crypttabpara que el sistema pueda desbloquear en el arranque:
sudo update-initramfs -u # Debian/Ubuntu
sudo dracut --force # RHEL/CentOS
26.8. Solución de problemas comunes
| Problema | Posible causa | Solución |
|---|---|---|
| “No key available with this passphrase” | Contraseña incorrecta o dispositivo no es LUKS | Verificar con cryptsetup luksDump, probar de nuevo |
| Dispositivo mapeado no aparece | No se abrió con luksOpen | Ejecutar cryptsetup luksOpen |
| Error al montar en el arranque | Falta entrada en /etc/crypttab o clave incorrecta | Revisar configuración, usar cryptdisks_start para depurar |
swapoff no funciona | Swap en uso | Verificar procesos con fuser -vm /swapfile |
| Pérdida de datos al formatear | Se usó luksFormat sobre partición con datos | Irreversible, siempre respaldar antes |
26.9. Ejercicios prácticos
Crear un volumen cifrado básico: 1.1. Crea una partición de prueba y formatéala con LUKS. 1.2. Abre el dispositivo, crea un sistema de archivos ext4 y móntalo en
/mnt/secreto. 1.3. Crea archivos, desmonta y cierra. Verifica que el contenido no es legible sin abrir.Montaje automático: Configura
/etc/crypttaby/etc/fstabpara que el volumen se abra y monte automáticamente pidiendo passphrase. 2.1. Reinicia y comprueba que solicita la contraseña y monta.Archivo de claves: Añade una clave secundaria desde un archivo. Configura para que use ese archivo. Verifica que ya no pide contraseña en el arranque.
Swap cifrado (partición): Cifra una partición swap siguiendo los pasos. Actívala y verifica con
swapon --show. Configura persistencia y reinicia.Swap cifrado (archivo): Crea un archivo swap cifrado, actívalo. Asegúrate de que
/etc/crypttaby fstab lo reconozcan. Prueba el reinicio.Recuperación de un volumen: Simula olvidar la passphrase: intenta abrir con una incorrecta. Luego añade una nueva clave con
cryptsetup luksAddKeyusando la correcta. Muestra las ranuras de claves concryptsetup luksDump.
26.10. Resumen y consejos para LFCS
- El comando
cryptsetupes la base:luksFormat,luksOpen,luksClose,luksAddKey,luksDump. - La persistencia se logra con
/etc/crypttaby/etc/fstab. - El swap debe cifrarse siempre que sea posible.
- Actualiza el initramfs tras cambios en crypttab.
- Practica el ciclo completo: crear, abrir, formatear, montar, desmontar, cerrar. En el examen, es probable que pidan cifrar una partición y configurarla para que se monte automáticamente.
Con este capítulo has aprendido a proteger los datos en reposo. En el siguiente tema nos adentraremos en el uso del sistema, utilización y resolución de problemas, donde integraremos las herramientas de monitoreo y diagnóstico que vimos en capítulos anteriores.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
