Volúmenes encriptados (LUKS, Linux Unified Key Setup) en RedHat/CentOS 6

En esta entrada vamos a crear un volumen encriptado, algo muy útil si trabajamos con un portátil y queremos asegurar los datos ante la posible perdida.

Se pueden hacer cosas muy interesantes, como que nos pida la clave al arrancar o tener la clave por ejemplo en un USB. A mi me parece muy buena la opción de un dispositivo USB con la clave para poder arrancar.

Vamos al asunto, los pasos a seguir son:

1- Asegurarnos que tenemos cargado el módulo de kernel dm_crypt con:

Source   
[root@test ~]# lsmod | grep dm_crypt
dm_crypt 10848 2
dm_mod 63859 11 dm_crypt

Si no aparece la linea dm_crypt hay que cargarlo con:

Source   
[root@test ~]# modprobe dm_crypt

Si la instrucción anterior no ha dado problemas, tenemos que hacer que la carga sea automática al arrancar, esto lo podemos hacer añadiendo un fichero en:

Source   
/etc/sysconfig/modules/crypt.modules

Con el contenido:

Source   
#!/bin/bash
modprobe dm_crypt

Debemos reiniciar la máquina y verificar que se carga el módulo automáticamente.

2- Paquetería necesaria para trabajar con volumenes encriptados. La herramienta necesaria que hay que tener instalada es cryptsetup, si no la tenemos podemos instalarla con:

Source   
yum install cryptsetup-luks

3- Creación de clave aleatoria. Creamos una clave aleatoria de 256 bits (32 bytes) con:

Source   
[root@test ~]# dd if=/dev/urandom of=/root/hd_clave bs=32 count=1
1+0 records in
1+0 records out
32 bytes (32 B) copied, 0.000201264 s, 159 kB/s

La clave la tenemos ahora en /root/hd_clave

4- Formatear partición (utilizaremos /dev/sdb2) para encriptación con la clave generada en el punto anterior:

Source   
[root@test ~]# cryptsetup luksFormat /dev/sdb2 --key-file /root/hd_clave
WARNING!
========
This will overwrite data on /dev/sdb2 irrevocably.
Are you sure? (Type uppercase yes): YES

Un dato a tener en cuenta es que si no definimos el parámetro –key-file nos pedirá una clave en interactivo, esto puede ser útil para poder fijar la clave a algo fácil de recordar y que nos sea pedida durante el arranque.

5- Mapeo de volumen encriptado. Los volúmenes encriptados son mapeados en /dev/mapper, esto se realiza con:

Source   
[root@test ~]# ls /dev/mapper/
control vg_test-lv_root vg_test-lv_swap vol_encriptado
[root@test ~]# cryptsetup luksOpen /dev/sdb2 vol_enc_clave --key-file /root/hd_clave
[root@test ~]# ls /dev/mapper/
control vg_test-lv_root vg_test-lv_swap vol_enc_clave vol_encriptado

Ahora el volumen se encuentra mapeado como /dev/mapper/vol_enc_clave

6- Ahora ya podemos trabajar con /dev/mapper/vol_enc_clave como si fuese un volumen normal, lo formateamos y montamos:

Source   
[root@test ~]# mkfs.ext4 /dev/mapper/vol_enc_clave
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
13552 inodes, 54176 blocks
2708 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=55574528
7 block groups
8192 blocks per group, 8192 fragments per group
1936 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@test ~]# mkdir /vol_enc
[root@test ~]# mount /dev/mapper/vol_enc_clave /vol_enc/

Se puede verificar que podemos acceder al /vol_enc sin problemas, lo que falta es hacer todo esto automáticamente.

7- Mapeo y montaje automático al arrancar la máquina. Primero se ha de mapear el volúmen encriptado añadiendo una linea en /etc/crypttab:

Source   
vol_enc_clave /dev/sdb2  /root/hd_clave

Este fichero es leído por el módulo dm_crypt y realiza el mapeo /dev/mapper/vol_enc_clave, utilizando la partición /dev/sdb2 junto con la clave /root/hd_clave.

Si queremos tener la clave en USB externo, solo tenemos que copiarla e identificar el dispositivo asignado para el y sustituir en la ruta de la clave. Evidentemente antes hay que montar el dispositivo USB y para evitar sorpresas trabajar con UUID en el montaje.

Si no definimos la clave, durante el arranque nos la pedirá. Esto es interesante para no tener que depender de ningún otro dispositivo y no tenerla almacenada en el mismo HD (algo bastante inútil teniendo en cuenta de lo que estamos hablando).

El montaje ahora es como en cualquier otro HD en /etc/fstab:

Source   
/dev/mapper/vol_enc_clave       /vol_enc        ext4    defaults        1       2

Vamos en resumidas cuentas, para trabajar con encriptación necesitamos:

-Elegimos la partición que queremos encriptar (ojo que se pierde todo).

-Formateamos la partición con clave aleatoria o definimos la clave de forma interactiva con: setupcrypt luksFormat

-Mapeo de partición encriptada, de forma interactiva con setupcrypt luksOpen o automática editando el fichero /etc/crypttab

-Formato del volumen mapeado: mkfs.ext4

-Montaje de forma interactiva con mount o automática editanto /etc/fstab

Espero que os sea útil…

Deja un comentario