Inicio
» LINUX
»
Cómo configurar una partición SWAP cifrada en una instalación existente de Debian 12.
Cómo configurar una partición SWAP cifrada en una instalación existente de Debian 12.
Encriptar la partición de intercambio en un sistema Debian 12 existente es recomendable si se desea evitar que páginas de memoria, contraseñas, fragmentos de documentos y otros datos transitorios se escriban en el disco sin cifrar. Para un equipo que no requiere hibernación, Debian documenta un diseño sencillo: proteger la partición de intercambio con dm-crypt sin cifrar y generar una nueva clave de cifrado aleatoria en cada arranque.
Esta guía utiliza ese diseño. Presupone Debian 12 “bookworm”, una partición de intercambio dedicada y systemd como sistema de inicio. Los comandos son deliberadamente conservadores, ya que un error en la ruta de un dispositivo de bloques puede sobrescribir la partición incorrecta. Lea primero los puntos de decisión y luego sustituya los identificadores de dispositivo por los suyos, en lugar de copiar los valores de ejemplo sin más.
La documentación de cryptsetup de Debian describe específicamente el intercambio cifrado y recomienda desactivarlo, agregar la partición /etc/crypttabcon /dev/urandom, cambiar /etc/fstabal dispositivo mapeado y luego reactivar el intercambio. Consulte el archivo README de cryptsetup de Debian . El manual crypttab(5) de Debian 12 también documenta los campos de crypttab y las opciones de dm-crypt simples.
¿Deberías usar un intercambio cifrado con clave aleatoria?
Úselo cuando necesite una partición de intercambio cifrada y no requiera hibernación. La clave se regenera en cada arranque, por lo que el contenido antiguo de la partición de intercambio se vuelve ilegible después del apagado. Esta es precisamente la característica de seguridad que buscan la mayoría de las instalaciones de escritorio y servidor.
No utilice esta configuración si depende de la hibernación, la suspensión a disco, el modo de suspensión híbrida o la suspensión seguida de hibernación. La reanudación requiere que el siguiente arranque descifre la misma imagen de hibernación. Una nueva clave aleatoria lo imposibilita. Debian indica explícitamente que el intercambio de claves aleatorias no puede utilizarse como dispositivo de reanudación. La documentación de systemd hibernate-resume de Debian 12 también muestra que la reanudación depende de un dispositivo de reanudación persistente.
Si se requiere hibernación, utilice un diseño de cifrado persistente, como un dispositivo de intercambio con LUKS y una configuración adecuada de desbloqueo y reanudación. Esta configuración es diferente y queda fuera de esta guía.
¿Su espacio de intercambio ya está protegido mediante cifrado de disco?
Antes de realizar cualquier cambio, verifique la configuración. Si su volumen lógico de intercambio ya se encuentra dentro de un contenedor cifrado con LUKS, agregar otra capa de dm-crypt podría ofrecer pocas ventajas prácticas y, además, aumentar la complejidad.
Mira el dispositivo que se muestra swapon --showy rastrea sus padres en lsblk. Un diseño común sin cifrar podría mostrarse /dev/sda3directamente como tipo swap. Una instalación de LVM cifrada podría mostrar en cambio el espacio de intercambio debajo de un crypto_LUKSpadre.
Identifique la partición de intercambio activa y un identificador de partición estable antes de realizar cualquier cambio. Los nombres e identificadores de dispositivos que se muestran aquí son solo ejemplos.
La distinción es importante porque este artículo trata sobre la conversión de una partición de intercambio dedicada no cifrada . Si swapon --showinforma de un archivo de intercambio, utilice un procedimiento específico para archivos de intercambio. Si el intercambio ya se encuentra dentro de un almacenamiento cifrado, primero decida si es necesaria una segunda capa.
¿Qué debes grabar antes de apagar el interruptor?
Registre la ruta exacta de la partición, su tamaño y su PARTUUID . Un PARTUUID identifica la entrada de la tabla de particiones y sigue siendo útil incluso después de que la firma de intercambio dentro de la partición sea reemplazada por datos cifrados.
Por ejemplo:
sudo blkid /dev/sda3
ls -l /dev/disk/by-partuuid/
Es posible que vea una salida que contenga un valor como este:
PARTUUID="11111111-2222-3333-4444-555555555555"
En los ejemplos que se muestran a continuación, la ruta estable correspondiente es:
Evite confiar en la /dev/sda3posibilidad de que cambie la enumeración de discos. Asimismo, evite usar el UUID del sistema de archivos de intercambio antiguo como identificador de origen a largo plazo: la configuración de intercambio cifrado recrea la firma de intercambio en el dispositivo cifrado asignado, por lo que el UUID de intercambio sin procesar antiguo no es la identidad persistente correcta para la partición subyacente.
1. ¿Cómo se prepara el sistema de forma segura?
Instale cryptsetup si aún no está presente y, a continuación, haga una copia de seguridad de los dos archivos de configuración que va a editar.
sudo apt update
sudo apt install cryptsetup
sudo cp -a /etc/crypttab /etc/crypttab.before-encrypted-swap 2>/dev/null || true
sudo cp -a /etc/fstab /etc/fstab.before-encrypted-swap
Si /etc/crypttabaún no existe, no hay problema; créelo cuando edite la configuración.
A continuación, asegúrese de que el sistema tenga suficiente memoria disponible para el breve período en que la partición de intercambio esté desactivada. Luego, desactive únicamente la partición de intercambio que está convirtiendo. Usar el dispositivo exacto es más seguro que swapoff -aen una máquina con varias áreas de intercambio.
sudo swapoff /dev/sda3
swapon --show
Desactive el intercambio de memoria objetivo antes de aplicar el cifrado. En sistemas con varios dispositivos de intercambio, opere en el dispositivo deseado en lugar de desactivar todo innecesariamente.
No ejecute el proceso mkswapen la partición sin cifrar a partir de este punto. La firma de intercambio debe crearse en el dispositivo de mapeo cifrado, no en la partición de respaldo sin cifrar.
2. ¿Qué debe contener /etc/crypttab?
Cree o edite /etc/crypttaby agregue una entrada para la asignación de intercambio cifrado. A continuación se muestra la documentación de Debian cryptsetup:
Reemplace el ejemplo de PARTUUID con el de su sistema.
Los campos significan:
cswapes el nombre del mapeador, creando /dev/mapper/cswap.
El segundo campo es la partición de intercambio subyacente real.
/dev/urandomProporciona una nueva clave aleatoria cada vez que se crea la asignación.
plainSelecciona dm-crypt simple en lugar de una cabecera LUKS persistente.
cipher=aes-xts-plain64,size=256Hace que los parámetros de plain-dm-crypt sean explícitos en lugar de depender de valores predeterminados que pueden cambiar.
swapLe indica a la integración de cryptsetup que este dispositivo mapeado es de intercambio y que debe inicializarse adecuadamente.
La entrada crypttab crea una asignación cifrada temporal llamada cswap con una clave nueva de /dev/urandom en cada activación.
El manual de crypttab de Debian advierte que dm-crypt no almacena metadatos de cifrado, hash ni tamaño de clave en la cabecera, a diferencia de LUKS. Por ello, es útil registrar explícitamente el cifrado y el tamaño de la clave. El manual también documenta, discardaunque con reservas, las implicaciones de seguridad; no lo añada simplemente porque el dispositivo de almacenamiento sea una unidad SSD, a menos que haya evaluado previamente los riesgos.
3. ¿Qué cambios se producen en /etc/fstab?
Busque la antigua línea de intercambio sin cifrar en /etc/fstab. Puede usar un UUID, una ruta de dispositivo u otro identificador persistente. Por ejemplo:
UUID=OLD-SWAP-UUID none swap sw 0 0
Reemplácelo con el dispositivo cifrado asignado:
/dev/mapper/cswap none swap sw 0 0
No deje ambas entradas activas. Si tanto la partición sin formato como la /dev/mapper/cswappartición de intercambio están habilitadas, se anula el propósito del cifrado de la partición y se corre el riesgo de que la activación durante el arranque se produzcan errores.
El archivo fstab debe apuntar al dispositivo de mapeo cifrado, no a la partición de intercambio original sin formato.
El manual fstab(5) de Debian define el formato de entrada de intercambio, mientras que swapon(8) explica cómo se activan las entradas marcadas como intercambio.
4. ¿Cómo se activa y verifica antes de reiniciar?
Después de guardar ambos archivos, inicie el mapeo cifrado y luego habilite la entrada de intercambio. La documentación de cryptsetup de Debian utiliza:
sudo cryptdisks_start cswap
sudo swapon -a
Ahora verifique las tres capas:
swapon --show
sudo cryptsetup status cswap
lsblk -o NAME,TYPE,FSTYPE,SIZE,MOUNTPOINTS
Un resultado saludable debería mostrar intercambio en /dev/mapper/cswap, no directamente en la partición original. cryptsetup status cswapdebería informar que la asignación está activa.
Si cryptdisks_startno está disponible en su instalación, no improvise comandos destructivos. Vuelva a comprobar que el cryptsetuppaquete esté instalado y que la sintaxis de crypttab sea válida. También puede dejar que el proceso de arranque normal de Debian cree la asignación después de completar la configuración de reanudación que se describe a continuación. Debian 12 utiliza generadores de systemd para traducir la configuración de crypttab y fstab a unidades de tiempo de arranque.
5. ¿Necesitas desactivar la reanudación de la hibernación?
Sí, si esta partición estaba configurada como dispositivo de reanudación del sistema. Una clave aleatoria no puede descifrar una imagen de hibernación escrita con la clave anterior. Las instrucciones de Debian para el intercambio cifrado indican explícitamente a los administradores que desactiven la reanudación al convertir la antigua partición de intercambio de reanudación en una partición de intercambio cifrada con clave aleatoria.
Si se refiere a la partición de intercambio que acaba de convertir, establezca resume en none:
echo "RESUME=none" | sudo tee /etc/initramfs-tools/conf.d/resume
sudo update-initramfs -u
Aquí es donde radica la update-initramfs -uimportancia. No es necesario reconstruir el initramfs simplemente porque haya cambiado una entrada de intercambio posterior al arranque; sí es necesario actualizarlo al eliminar un destino de reanudación de hibernación antiguo que el initramfs podría intentar utilizar.
Prueba de reinicio: ¿qué prueba que la configuración funciona?
Reinicie el sistema únicamente después de que la activación en vivo funcione y los archivos de configuración sean correctos:
La partición de respaldo sin procesar no aparece directamente como intercambio activo.
cryptsetup status cswapinforma de una asignación dm-crypt simple activa.
La máquina arranca sin solicitar una contraseña de intercambio; la clave aleatoria se genera automáticamente.
También puedes reiniciar dos veces y comparar el comportamiento del mapeo. La clave del diseño es que la clave de cifrado es efímera; el contenido del archivo de intercambio del arranque anterior no se puede recuperar después de que se vuelva a crear el mapeo.
¿Qué ocurre si la máquina entra en modo de emergencia?
Las causas más comunes son una ruta de dispositivo de respaldo incorrecta, un error tipográfico en /etc/crypttabo una /etc/fstablínea que aún apunta al antiguo swap sin formato. Inicie en modo de recuperación o utilice un entorno de rescate, monte el sistema de archivos raíz en modo lectura/escritura y restaure las copias de seguridad si es necesario.
Entre las comprobaciones útiles se incluyen:
sudo cryptsetup status cswap
systemctl status systemd-cryptsetup@cswap.service
systemctl status dev-mapper-cswap.swap
journalctl -b -u systemd-cryptsetup@cswap.service
Los nombres de las unidades pueden codificarse de forma diferente para nombres de mapeadores inusuales, así que utilícelos systemctl list-units '*cryptsetup*'si el nombre exacto del servicio no es obvio.
¿Qué ocurre con el descarte de unidades SSD?
No actives la opción discard por defecto solo para intentar mejorar el rendimiento teórico de un SSD. La documentación de crypttab de Debian indica que el paso de solicitudes discard a través de un dispositivo cifrado tiene implicaciones de seguridad. El manual de swapon de Debian también señala que discard puede mejorar el rendimiento en algunos SSD, pero a menudo no lo hace. Si la necesitas, evalúa primero tu modelo de almacenamiento y tu modelo de amenazas, y luego añádela de forma deliberada.
¿Sigue siendo útil el intercambio cifrado si el sistema de archivos raíz no está cifrado?
Sí, pero es importante entender los límites. El intercambio cifrado protege las páginas de memoria escritas en la partición de intercambio. No cifra los archivos guardados en un sistema de archivos raíz o de inicio no cifrado, el historial de comandos, las cachés de aplicaciones, los volcados de memoria, los archivos temporales ni los registros. Si el objetivo es una protección integral contra la exposición de datos en caso de robo del disco, el cifrado completo del disco o del sistema de archivos ofrece un control más exhaustivo.
Lista de verificación final
Confirme que el destino sea una partición de intercambio dedicada y sin cifrar, no un archivo de intercambio y que no esté ya protegido por un dispositivo principal cifrado.
Registre una ruta de partición estable como por ejemplo /dev/disk/by-partuuid/...:
Desactive el intercambio sin procesar antes de configurar dm-crypt.
Agregue una entrada random-key plain-dm-crypt a /etc/crypttab.
Señala /etc/fstabsolo a /dev/mapper/cswap.
Active la asignación y verifíquela antes de reiniciar.
Si el intercambio anterior era un dispositivo de reanudación, configúrelo RESUME=noney ejecútelo update-initramfs -u.
Tras reiniciar, verifique que solo el mapeador cifrado esté activo como intercambio.
Para los sistemas Debian 12 que no hibernan, este enfoque mantiene la configuración reducida y evita almacenar una clave de intercambio persistente. La clave no reside en qué comando de cifrado ejecutar, sino en si el intercambio con clave aleatoria se ajusta a los requisitos de administración de energía. Una vez resuelto esto, el resto consiste en una migración controlada de la partición de intercambio sin formato a una asignación dm-crypt que se recrea de forma segura en cada arranque.