Cifrado de discos con Luks


Luks nos permite cifrar el contenido del disco y trabajar con él de forma transparente. Esto nos protege de ataques offline como por ejemplo en caso de pérdida de un portatil, o si sustituimos un disco ya no nos tenemos que preocupar de borrar la información que contiene.

Podemos crear un dispositivo Luks directamente sobre una partición, un logical volume de LVM, un dispositivo RAID, etc.

Es recomendable limpiar la partición previamente y rellenarla con datos aleatorios. Por ejemplo, para cifrar la partición /dev/sda3 (Se perderán todos los datos que contenga):

# dd if=/dev/urandom of=/dev/sda3 bs=1M # cryptsetup luksFormat /dev/sda3

Nos pedirá una contraseña, si la olvidamos, nuestros datos serán irrecuperables.

A continuación hay que abrir el dispositivo

# cryptsetup luksOpen /dev/sda3 _mi-disco-cifrado_

El último parámetro es el nombre que le damos, puede ser cualquier cosa. Se creará un dispositivo en /dev/mapper/_mi-disco-cifrado_ que será nuestro disco descifrado.

# mkfs.ext4 /dev/mapper/_mi-disco-cifrado_ # mount /dev/mapper/mi-disco-cifrado /mnt/_mi-disco-cifrado_

Cuando queremos desmontar y cerrar el dispositivo, tenemos que hacer:

# umount /mnt/_mi-disco-cifrado_ # cryptsetup luksClose _mi-disco-cifrado_

Para que el proceso sea automático, podemos añadirlo a crypttab y fstab. Para ello vamos a crear un archivo con una nueva contraseña (Luks permite tener hasta 8 contraseñas distintas para el mismo dispositivo). El archivo lo creamos con datos aleatorios:

# touch /etc/keyfile # chmod 0600 /etc/keyfile # head -c 4K /dev/urandom > /etc/keyfile # cryptsetup luksAddKey /dev/sda3 /etc/keyfile

Fichero /etc/crypttab:

mi-disco-cifrado    /dev/sda1    /etc/keyfile
# También podemos usar el UUID de la partición para una mayor robustez, por ejemplo:
# mi-disco-cifrado    UUID=1234234-2354235-23423432-234423    /etc/keyfile

Fichero /etc/fstab:

/dev/mapper/mi-disco-cifrado    /mnt/mi-disco-cifrado  ext4  defaults  1 2

Cabe destacar que a partir de las versiones de kernel >= 3.1, cryptsetup >= 1.4.0 y systemd >= 44-11 (¡hola Beefy Miracle!) es posible pasar los comandos TRIM al dispositivo físico, incluso si estamos usando LVM, por lo que si nuestro disco es un SSD, podemos montar el filesystem con la opción discard en el fstab y la opción allow-discards como cuarta columna en crypttab. Hay que tener en cuenta que esto disminuiría ligeramente la seguridad, ya que daría información sobre el sistema de archivos. Podéis informarios aquí: http://asalor.blogspot.com.es/2011/08/trim-dm-crypt-problems.html

Quedaría del siguiente modo:

Fichero /etc/crypttab:

mi-disco-cifrado    UUID=1234234-2354235-23423432-234423    /etc/keyfile    allow-discards

Fichero /etc/fstab:

/dev/mapper/mi-disco-cifrado    /mnt/mi-disco-cifrado  ext4  defaults,discard  1 2