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
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
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
A partir de este momento ya se puede utilizar como un dispositivo normal, formatearemos la unidad:
# mkfs.ext4 /dev/mapper/disco_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
Y agregamos la siguiente línea en /etc/crypttab para el mapeo
Debemos tener en cuenta que al iniciar el sistema se parará preguntando por la contraseña:
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
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
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