Cifrado de discos en Linux

El cifrado es el proceso por el cual la información es ocultada para que no pueda ser leída por las persona, esto proporciona un plus de seguridad en la información. El cifrado se puede aplicar a cualquier elemento que permita guardar información ya sea  ficheros, dispositivos, particiones…etc

El Linux existen muchos sistemas de cifrado, uno de los más comunes es dm-crypt (Device Mapper crypt) que provee una forma genérica para el cifrado de los dispositivos de bloque.

LUKs (Linux Unified Key Setup) es una mejora de dm-crypt y dispone de muchas más opciones a la hora de cifrar, como es la posibilidad de añadir varias llaves, mantener los metadatos en el volumen y mejoras en la protección de la información.

Para ambos sistemas de cifrado se puede utilizar la herramienta cryptsetup que facilitara el proceso de los dispositivos.

Como existen varias opciones de cifrado en cryptsetup y para nuestro ejemplo, primero comprobaremos su configuración por defecto para saber si cumple con nuestras necesidades:

# cryptsetup --help | grep LUKS.*Key

cifrado

En nuestro caso vamos a cifrar el disco /dev/sdd y utilizaremos la configuración por defecto que nos pedirá la contraseña para poder acceder posteriormente al disco. Lo primero es proceder a cifrar el disco:

# cryptsetup -y luksFormat /dev/sdd

cifrado

Device Mapper es un framework de Linux que permite mapear un dispositivo de bloque a otro, es utilizado por el software de RAID y LVM, en el caso del cifrado también lo utilizaremos para poder acceder al contenido del disco, la ubicación será /dev/mapper/ y el nombre que le daremos será disco_cifrado

cryptsetup luksOpen /dev/sdd  disco_cifrado

Comprobaremos que se ha creado el dispositivo con el comando lsblk

lsblk

A partir de este momento ya se puede utilizar como un dispositivo normal, formatearemos la unidad:

# mkfs.ext4 /dev/mapper/disco_cifrado

cifrado

Y monteremos la unidad para poder utilizarla

# mount /dev/mapper/disco_cifrado /mnt/disco_nuevo

Los discos cifrados hay que cerrarlos después de usarlos, primero lo desmontamos

# umount /mnt/disco_nuevo

Y luego lo cerramos:

# cryptsetup luksClose disco_cifrado

Inicio del sistema preguntando la contraseña

Si queremos que el disco se monte en el inicio del sistema deberemos, por una parte agregarlo al fichero /etc/fstab y por otra definir el mapeo en el fichero /etc/crypttab:

Agregamos la siguiente línea en /etc/fstab

fstab

Y agregamos la siguiente línea en /etc/crypttab para el mapeo

cifrado

Debemos tener en cuenta que al iniciar el sistema se parará preguntando por la contraseña:

cifrado

Inicio del sistema sin preguntar contraseña

Para el montaje de la unidad cifrada durante el proceso de inicio del sistema sin preguntar contraseña, además de tener la entrada en el fichero /etc/fstab como el apartado anterior, tendramos que crear un fichero llave para que se consulte directamente en el inicio, en nuestro caso el proceso se realizará de la siguiente forma:

Crearemos el fichero llave

# dd if=/dev/urandom of=/etc/encrypted/key bs=2048 count=2

cifrado

Cambiaremos los permisos del fichero

# chmod 600 /etc/encrypted/key; chown root:root /etc/encrypted/key

Crearemos una llave para nuestro disco /dev/sdd

# cryptsetup luksAddKey /dev/sdd /etc/encrypted/key

Finalmente modificaremos nuestro archivo /etc/crypttab con el dato de la llave

cifrado

Notas finales

En principio cuando se apaga el equipo, sobretodo en sistemas con LVM y LUKs, el desmontaje y cerrado de las unidades cifradas se realiza automáticamente y no hay que realizar ninguna acción.

Los metadatos o cabecera de los dispositivos LUKs contienen toda la información del cifrado, como puede verse dañada por error de gestión o daño físico es buena práctica guardar una copia de ella.

Para sacar una copia

# cryptsetup luksHeaderBackup /dev/sdd --header-backup-file cabecera_backup

Para restaurar la copia

# cryptsetup luksHeaderRestore /dev/sdd --header-backup-file cabecera_backup