¿Cómo crear una partición de intercambio encriptada con clave aleatoria, refiriéndose a ella "by-uuid", en Debian?

8

Es sensato que si tiene algún tipo de cifrado de dispositivo de bloque implementado en su sistema GNU / Linux, también cifre su partición de intercambio, ya que cualquier dato descifrado puede escribirse en texto claro en cualquier momento en el intercambio.

Al mirar la página de manual de Debian para "crypttab" veo un ejemplo de creación de una partición de intercambio con clave aleatoria en el arranque, por lo que la clave se establece aleatoriamente a medida que avanza el arranque y solo el sistema lo conoce:

# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap

En este ejemplo, se hace referencia al dispositivo de intercambio mediante una ruta de desarrollo convencional, es decir /dev/sda6

Las rutas absolutas de los dispositivos están sujetas a cambios y se reasignan en el arranque si, por ejemplo, se conecta una unidad usb. ¡Un usuario sería muy infeliz si /dev/sda6fuera una partición diferente a la esperada y posteriormente se sobrescribiera con datos de intercambio aleatorio!

Entonces, la solución parece ser: use un UUID en lugar de una ruta de dispositivo (ya que un UUID no debería cambiar), reemplazando /dev/sda6con/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>

PERO ... aquí está el problema: ¡cada vez que cryptsetup recrea la partición de intercambio cifrada en el momento del arranque, genera un nuevo UUID! Doh!

Por lo tanto, debemos preservar el UUID de este sistema de archivos cifrado de alguna manera. Creo que cryptsetup puede hacer esto con su --offsetinterruptor, lo que permite la preservación del encabezado LUKS y, por lo tanto, el UUID.

He encontrado esta URL: https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions

¿Alguien sabe cómo implementar la solución descrita para Arch Linux en el sistema operativo Debian? Las secuencias de comandos de inicio mencionadas en el documento parecen no existir en el sistema operativo Debian

¡Gracias!

EDITAR Uno podría usar ecryptfs para lograr los mismos fines (espacio de intercambio encriptado) usando el comando: ecryptfs-setup-swap Sin los problemas que acosan el cifrado de dispositivos de bloque. Echa un vistazo a esta consulta de AskUbuntu

Geeb
fuente
"Uno podría usar ecryptfs para lograr los mismos fines [...] sin los problemas que acosan el cifrado de dispositivos de bloque". No, porque ecryptfs-setup-swapes solo un ayudante que configura dm-crypt/ crypttabpara ti. Como ecryptfses un controlador de nivel de archivo, no maneja particiones enteras, por lo que lo agiliza dm-crypt. Puede encontrar este método más fácil de usar, pero finalmente no está logrando nada diferente. En todo caso, las peculiaridades de este método (incluido el UUID) probablemente me confundieron más que si lo hubiera hecho yo mismo desde los primeros principios ... aunque aprendí más.
underscore_d

Respuestas:

6

¡Cada vez que cryptsetup recrea la partición de intercambio cifrada en el momento del arranque, genera un nuevo UUID! Doh!

En / etc / crypttab, use / dev / disk / by-id en lugar de / dev / disk / by-UUID para referirse a su partición de intercambio. Por ejemplo, su entrada / etc / fstab para intercambio podría ser

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0

Entonces la entrada correspondiente correcta en / etc / crypttab sería algo así como

# <name> <device> <password> <options>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Tenga en cuenta que el dispositivo anterior se refiere a / dev / disk / by-id que puede encontrar para su unidad escribiendo lo siguiente en la CLI:

ls -lF /dev/disk/by-id
Jun_in_Jeju
fuente
Tenga en cuenta que el nombre de by-id se refiere tanto al modelo y número de serie, que es muy poco probable que se solapan con cualquier otro dispositivo que pueda conectar.
cscracker
... lo cual, para beneficio de los lectores que se estén preguntando, es algo muy bueno. No desea configurar su intercambio cifrado ya que /dev/sdaNluego conectar otro disco algún día y descubrir que su orden de nomenclatura del núcleo se ha cambiado y una de sus particiones no intercambiables ha sido rechazada. El UUID también sería bueno, pero creo que el problema clave es que está almacenado en los primeros bytes de la partición, por lo que obtenemos el escenario insoluble de huevo y gallina que se discute aquí.
underscore_d
3

En mi / etc / crypttab, tengo

# <target name>  <source device>        <key file>   <options>
swap             /dev/mapper/cswap      /dev/random  swap

Aquí / dev / mapper / cswap es un volumen lógico creado por LVM, que se encarga de asignar correctamente los nombres de volúmenes lógicos independientemente de los nombres de las letras de unidad. También me permite cambiar fácilmente el tamaño de mi partición de intercambio.

Andrew Schulman
fuente
0

Intente implementar el resto de la solución, ignorando el archivo init. Parece que ese fragmento de script de inicio solo está ahí para protegerte. O Debian no lo protege de esa manera, o le dará un mensaje de error cuando intente arrancar con él que, con suerte, lo llevará al lugar correcto.

También tendría cuidado de que IIRC Debian y ArchLinux tengan diferentes formatos para / etc / crypttab (loco, lo sé, pero me mudé de Ubuntu a Arch hace un par de años y finalmente decidí usar bash directo en lugar de entrometerse con crypttabs).

idupree
fuente
Gracias por su respuesta. Sí, estaría de acuerdo en que la secuencia de comandos de Arch es una comprobación de integridad para asegurarse de que la partición parece ser una partición de intercambio. Pero me estoy imaginando haber dejado una unidad USB conectada y reiniciando para encontrar una partición que no sea de intercambio. Creo que lloraría lágrimas de verdad ... ¡Estoy agradecido por todos los controles de cordura que puedo obtener!
Geeb
Eso no debería suceder porque estás usando su UUID para encontrarlo en primer lugar. Entonces, todo lo que encontrará es la partición de intercambio, o nada.
idupree
0

Ejecute ecryptfs-setup-swap o manualmente:

¡Esta configuración utiliza claves generadas aleatoriamente en el arranque y no admitirá la hibernación en el disco duro! ¡Debe deshabilitar la hibernación a través de su respetable DE Power Management Utility y configurarlo en Shutdown on Critical para evitar la pérdida de datos!

Cambiar a una cuenta de administrador / root

su root o sudo para cada comando

Deshabilitar intercambio

intercambio -a

Localice la partición de intercambio existente

lsblk

ejemplo: sda3 8: 3 0 8G 0 parte [SWAP]

Sobrescribir intercambio antiguo

dd if = / dev / zero bs = 1024000 of = / dev / sda <#>

ejemplo: dd if = / dev / zero bs = 1024000 of = / dev / sda3

Configuración de FSTAB

vim / etc / fstab

Reemplace el antiguo dispositivo SWAP con el nombre del mapeador crypttab: / dev / mapper / cswap

OLID UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc swap swap default 0 0

NUEVO

/ dev / mapper / cswap none swap pri = 1, por defecto 0 0

Configuración criptográfica

ls -lF / dev / disk / by-id

Ejemplo: ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3

vim / etc / crypttab

cswap / dev / disk / by-id / ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 / dev / urandom swap, cipher = aes-cbc-essiv: sha256, size = 256

Intercambio cifrado activo

Reinicia la computadora

Verifique las operaciones de intercambio cifradas

dmsetup -C info

Ejemplo: cswap 253 0 L - w 2 1 0 CRYPT-PLAIN-cswap

lsblk

Ejemplo ├─sda3 8: 3 0 8G 0 parte
│ └─cswap 253: 0 0 8G 0 cripta [SWAP]

cat / proc / swaps

ejemplo: Nombre de archivo Tipo Tamaño Utilizado Prioridad / dev / dm-0 partición 8385532 0 -1

Timothy Butterworth
fuente