Crear una partición ext4 cifrada en Linux

De Apuntes
Saltar a: navegación, buscar

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

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.