¿Cómo configuro un archivo de intercambio encriptado en Linux?

15

¡ADVERTENCIA 2017! La respuesta aceptada parece funcionar, pero con los núcleos recientes descubrí que el sistema se colgaría tan pronto como comenzara a intercambiarse. Si intenta utilizar un archivo de intercambio cifrado, asegúrese de que realmente se intercambia correctamente. Me llevó mucho tiempo descubrir por qué mi sistema seguía bloqueándose sin razón aparente. He vuelto a usar una partición de intercambio cifrada, que funciona correctamente.


¿Cómo configuro un archivo de intercambio cifrado (no partición) en Linux? ¿Es posible? Todas las guías que he encontrado hablan sobre particiones de intercambio encriptadas, pero no tengo una partición de intercambio, y prefiero no tener que volver a particionar mi disco.

No necesito soporte de suspensión en disco, por lo que me gustaría usar una clave aleatoria en cada arranque.

Ya estoy usando un volumen alojado en un archivo TrueCrypt para mis datos, pero no quiero poner mi intercambio en ese volumen. No estoy configurado para usar TrueCrypt para el archivo de intercambio si hay una mejor solución.

Estoy usando Arch Linux con el kernel predeterminado, si eso importa.

cjm
fuente
¿Cuál sería exactamente el punto de eso? Tendría que ser descifrado mientras lo usa, y estaría vacío cuando no esté en uso.
tkbx
1
Cuando busca encrypted swapfileel primer resultado conduce a rayslinux.blogspot.de/2011/01/…
ott--
@ott, a pesar de decir "archivo de intercambio" en el título, si lees las instrucciones en esa publicación, están describiendo claramente una partición de intercambio.
cjm
@tkbx, el punto es evitar que alguien recupere datos confidenciales del archivo de intercambio después de que apagué mi computadora. (O alguien que no ha sido capaz de adivinar la contraseña, por lo que están reiniciar en un CD en vivo o algo así.)
CJM
2
@ tkbx, no lo creo. Eso requeriría escribir gigabytes de datos cada vez que apaga su computadora. Los datos en un archivo de intercambio no se usan cuando reinicia, pero eso no significa que se borren del disco.
cjm

Respuestas:

14

De hecho, la página describe la configuración de una partición, pero es similar para un archivo de intercambio:

dd if=/dev/urandom of=swapfile.crypt bs=1M count=64
loop=$(losetup -f)
losetup ${loop} swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile

El resultado:

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/swap0                       partition       4000176 0       -1
/dev/mapper/swap1                       partition       2000084 0       -2
/dev/mapper/swapfile                    partition       65528   0       -3

swap0 y swap1 son particiones reales.

ott--
fuente
loop-AES.README dice en la sección 7.1: "Los bucles respaldados por archivos no se pueden usar para el intercambio". ¿Es eso falso (o solo cierto para loop-AES)?
cjm
Eso es sin dispositivo mapeador.
ott--
Revisé su comando cryptsetup para usarlo en openlugar de create(lo cual la página de manual dice que está obsoleto), y usar una clave aleatoria en lugar de solicitar una contraseña. Parece estar funcionando.
cjm
Esto no parece persistir al reiniciar: "swapon: no se puede abrir / dev / mapper / swapfile: No
existe
6

¡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!

Asegúrese de ejecutar sudo -so suantes de ejecutar lo siguiente.

  1. Deshabilitar intercambio:

    # swapoff -a
    
  2. Localice la partición de intercambio existente

    # lsblk
    

    Obtendrás algo como esto:

    sda3    8:3    0     8G  0 part [SWAP]
    
  3. Sobrescribir intercambio antiguo

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

    por ejemplo:

    # dd if=/dev/zero bs=1024000 of=/dev/sda3
    
  4. fstab preparar

    # vim /etc/fstab
    

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

    #<file system>      <mount point>   <type>  <options>   <dump>  <pass>
    /dev/mapper/cswap   none            swap    pri=1,defaults  0   0
    
  5. Configuración criptográfica

    # ls -lF /dev/disk/by-id
    

    Por ejemplo:

    ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3
    
    # vim /etc/crypttab
    
    # <name>    <device>                            <password>  <options>
      cswap     /dev/disk/by-id/ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3   /dev/urandom    swap,cipher=aes-cbc-essiv:sha256,size=256
    
  6. Intercambio cifrado activo

    # reboot
    
  7. Verifique las operaciones de intercambio cifradas

    Por ejemplo:

    # dmsetup -C info 
    cswap      253   0 L--w    2    1      0 CRYPT-PLAIN-cswap  
    # lsblk
    ├─sda3                8:3    0     8G  0 part  
    │ └─cswap             253:0    0     8G  0 crypt [SWAP]
    # cat /proc/swaps 
    Filename                Type        Size    Used    Priority
    /dev/dm-0               partition   8385532 0       -1
    
Timothy Butterworth
fuente
1

Si usa dd if=/dev/zero of=/swapfile bs=8G count=1, seguido de mkswap /swapfiley swapon /swapfile, debe tener un archivo de intercambio de trabajo en su sistema de archivos raíz. (lo usamos ddpara asegurarnos de que no haya agujeros en el archivo de intercambio)

Esto evita tener que meterse con dispositivos de bucle y / o criptab y simplemente coloca el archivo de intercambio dentro de su sistema de archivos ya cifrado. (Suponemos que está utilizando cifrado para toda la unidad aquí. Anteponga el /swapfileparámetro con la ruta a su directorio cifrado si está en otro lugar)

Ver man mkswapy man swaponpara más información.

Mio Rin
fuente
He intentado crear un archivo de intercambio como esto en mi directorio personal cifrado así, y se estrelló al igual que el archivo de intercambio cifrada hizo ...
fifaltra
¿Está su directorio de inicio desbloqueado en el arranque del sistema o cuando inicia sesión? Si solo se desbloquea cuando inicia sesión, entonces no puede tener el archivo de intercambio allí. El intercambio debe estar desbloqueado y estar disponible en el arranque del sistema. Además de eso, no desea cosas del sistema en su directorio de inicio de usuario. Eso está reservado para las cosas del usuario.
Mio Rin