Crear una partición ext4 cifrada en Linux
LUKS (de las siglas en inglés, Linux Unified Key Setup) es una especificación de cifrado estándar, originalmente destinado para Linux pero actualmente multi plataforma. Mientras la mayoría del software de cifrado de discos implementan diferentes e incompatibles formatos no documentados, LUKS especifica un formato estándar en disco, independiente de plataforma, para usar en varias herramientas. Esto no sólo facilita la compatibilidad y la interoperabilidad entre los diferentes programas, sino que también garantiza que todas ellas implementen gestión de contraseñas en un lugar seguro y de manera documentada.
Básicamente se indica un tipo de cifrado a una partición, se mapea indicando algún nombre que la identifique y con este nombre se gestiona tal cual como una partición normal.
Para gestionar las particiones con LUKS, se debe instalar la herramienta Cryptsetup. En Debian/Ubuntu se puede hacer desde repositorios:
# apt-get install cryptsetup
Contenido
Creación de la partición
Se parte del hecho que existe una partición vacía en el dispositivo '/dev/sdxy' donde ' x ' es la letra del dispositivo (a, b, ...) y ' y ' el número de partición (1, 2, 5, ...).
Se indica la especificación de cifrado a utilizar. Cualquier dato que contenga la partición se borrará. Se requerirá escribir una contraseña, esta misma se utilizará cada vez que se necesite acceder a la partición.
# cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sdxy
Luego se mapea el dispositivo con un nombre, por ejemplo "privado":
# cryptsetup luksOpen /dev/sdxy privado
Esto creará la ruta '/dev/mapper/privado' la cual va a ser utilizada para la gestión de la partición (formatear en ext4, montar, ...)
Por último se formatea la partición en ext4:
# mkfs.ext4 -L privado /dev/mapper/privado
Finalizado el proceso se elimina el mapeo creado:
# cryptsetup close privado
Para acceder nuevamente la partición, se deberá contar con la contraseña.
Montaje de la partición
Para que la partición se monte en cada inicio del sistema deben editarse un par de archivos.
Primero se debe mapear el dispositivo con algún nombre, para ello editamos el archivo:
/etc/crypttab
por ejemplo, si queremos asignarle el nombre privado añadimos la siguiente línea:
## Crea un dispositivo en /dev/mapper/ para una particion cifrada
privado /dev/sdxy none luks
En este caso se creará el dispositivo /dev/mapper/privado, el cual podremos montar como cualquier otro.
Se crea un directorio vacío donde se montará la partición, por ejemplo:
# mkdir /privado
y se edita el archivo:
/etc/fstab
añadiendo la siguiente línea al final del mismo:
# /privado (creado en /etc/crypttab)
/dev/mapper/privado /privado ext4 defaults 0 0
donde:
- /dev/mapper/privado es el dispositivo que se mapeó en el archivo crypttab
- /privado es el directorio donde se montará la partición
Cada vez que se inicie el sistema, se solicitará la contraseña para descifrar la partición.
Desbloqueo automático durante el arranque
Si se desea que la partición se desbloquee automáticamente durante el arranque, sin pedir contraseña, se debe generar una llave.
# cd /root # dd if=/dev/urandom of=cryptkey bs=512 count=1 # chmod 700 cryptkey
Añada la llave al dispositivo cifrado:
# cryptsetup luksAddKey /dev/sdxy /root/cryptkey
Verifique que la llave ha sido añadida al slot número 1 del dispositivo:
# cryptsetup luksDump /dev/sdxy
Ahora actualice el archivo:
/etc/crypttab
para incluir la respectiva llave:
## Crea un dispositivo en /dev/mapper/ para una particion cifrada
privado /dev/sdxy /root/cryptkey luks
Listo. En el siguiente arranque, el dispositivo cifrado se desbloqueará automáticamente.
Desbloqueo automático durante el inicio de sesión
Otra opción de desbloqueo automático, es durante el inicio de sesión de un usuario, para ello se hace uso del módulo pam_mount, el cual será llamado por el gestor de acceso gdm (Gnome) o lighdm (MATE). Esta opción está más orientada a computadoras de uso personal. La frase de la contraseña de la unidad cifrada debe ser la misma que la contraseña de su usuario de Linux.
Se debe tener instalado el módulo pam_mount:
# apt install libpam-mount
Edite el archivo /etc/crypttab, añadiendo la opción noauto:
## Crea un dispositivo en /dev/mapper/ para una particion cifrada
privado /dev/sdxy none luks,noauto
De manera similar edite el archivo /etc/fstab, añadiendo la opción noauto:
# /privado (creado en /etc/crypttab)
/dev/mapper/privado /privado ext4 defaults,noauto 0 0
Edite el archivo /etc/security/pam_mount.conf.xml. Añada una etiqueta volume, sustituyendo por la respectiva ruta a la partición cifrada:
<pam_mount>
…
<!-- Volume definitions -->
<volume fstype="crypt" path="/dev/sdxy" mountpoint="/privado" />
…
</pam_mount>
Para llamar al módulo pam_mount, se debe editar uno o más archivos, dependiendo del caso. Para autenticación en Gnome:
/etc/pam.d/gdm
En el caso de autenticación en MATE:
/etc/pam.d/lightdm
Y para autenticación en la consola:
/etc/pam.d/login
En cualquiera de los casos añada las líneas:
auth optional pam_mount.so session optional pam_mount.so
Listo. En el siguiente inicio de sesión el dispositivo cifrado se desbloqueará automáticamente.