PDA

Ver la versión completa : Particiones cifradas con dm-crypt



LUK
06-04-2007, 10:35
En este artículo veremos cómo crear particiones cifradas en un sistema linux 2.6 que se pueden utilizar como área de intercambio (swap) o para alojar cualquier sistema de ficheros soportado por el kernel

Introducción

El nuevo kernel 2.6 incorpora soporte para particiones encriptadas mediante el mecanismo 'dm-crypt' desarrollado por Christophe Sauot. El nuevo modelo aprovecha la flexibilidad del código que se incluyó en el kernel con el fin de gestionar discos RAID y volúmenes lógicos para sustituir al antiguo 'cryptoloop', que por diferentes razones se podría considerar obsoleto antes incluso de haber sido terminado.

Configuración del kernel e instalación de herramientas necesarias

Necesitaremos un kernel 2.6.4 final o superior.

Utilizando nuestro script de configuración favorito (config, menuconfig, xconfig o gconfig) deberemos entrar en la sección 'Device Drivers' -> 'Multi-device support (RAID and LVM)' y activar soporte para las opciones 'device-mapper' y 'dm-crypt'. Podemos compilarlas estáticamente en el kernel o bien configurarlo para que se carguen como módulos.

También deberemos entrar en la sección 'Cryptographic options' y habilitar el soporte para los algoritmos que pretendamos utilizar, por ejemplo, AES, que es una muy buena opción.

Tendremos que instalar la librería de espacio de usuario 'libdevmapper' y la utilidad de configuración 'dmsetup' (en Debian se instalan ambas con un 'apt-get install dmsetup', en Gentoo con 'emerge dmsetup', etc...), y un pequeño script que utiliza estas herramientas para facilitar la creación de los volúmenes encriptados llamado 'cryptsetup' (disponible también como paquete en las versiones más recientes de muchas distribuciones).

Creación y formato de las particiones cifradas

El subsistema 'device-mapper' del kernel, en el que se apoya 'dm-crypt', utiliza un dispositivo de bloque existente (por ej, /dev/hda3) como 'back-end' sobre el que se crea un nuevo dispositivo de bloque 'virtual'. Los accesos a este dispositivo 'virtual' se canalizan a través de los algoritmos de cifrado pertinentes antes de realizar las operaciones físicas en el dispositivo 'back-end'.

Por ello, primero deberemos tener las particiones que actuarán de 'back-end' creadas.

Área de intercambio cifrada

Podemos utilizar la partición de intercambio existente en nuestro sistema como dispositivo de soporte para la partición de intercambio cifrada. Supongamos que se trata de /dev/hda3.

Primero desactivaremos la partición de intercambio con el siguiente comando:



# swapoff /dev/hda3


Si hemos compilado el soporte para 'device-mapper' como módulo, deberemos cargarlo manualmente:



# modprobe dm_mod


Los demás módulos se cargan automáticamente bajo demanda. En caso de haber compilado el soporte directamente en el kernel, no será necesario este paso.

A continuación utilizamos el script 'cryptsetup' para configurar el volumen lógico cifrado de la siguiente forma:



# cryptsetup -d /dev/random create cryptswap /dev/hda3


La opción '-d' especifica un fichero del que leer la clave a utilizar. Utilizamos una clave aleatoria ya que no necesitaremos acceder a los datos presentes en la partición de intercambio tras un reinicio del sistema, y supone un nivel de seguridad añadido.

Ahora deberíamos disponer de nuestro volumen lógico en /dev/mapper/cryptswap. Podemos utilizarlo como si se tratara de una partición en un disco normal y corriente. Así que lo preparamos para utilizarlo como partición de intercambio.



# mkswap /dev/mapper/cryptswap


Y, finalmente...



# swapon /dev/mapper/cryptswap


Partición de datos cifrada

Supongamos que disponemos de la partición /dev/hda4 para utilizar como 'back-end'. Perderemos todo el contenido de dicha partición, por lo que resultaría conveniente copiar su contenido a algún otro sitio, caso de no disponer de una partición vacía.



# cryptsetup create cryptpart /dev/hda4


Nos solicitará la contraseña con la que queremos cifrar el contenido. En este caso, al tratarse de una partición que contendrá datos, sería de agradecer poder acceder a esos datos tras un reinicio del sistema, para lo cual sería muy conveniente recordar la contraseña.

Ahora podemos formatear el dispositivo virtual con nuestro sistemas de ficheros preferido. (Nota: si la partición contenía datos, es justo ahora cuando los vamos a destruir).



# mke2fs -j /dev/mapper/cryptpart


Finalmente podemos montarlo...



# mkdir /crypto
# mount /dev/mapper/cryptpart /crypto


y utilizarlo como cualquier otro sistema de ficheros (ext3, en este caso).

Persistencia

Si ahora reiniciáramos el sistema, y al margen de que los scripts de inicio nos indicarían un error al intentar activar la partición de intercambio en /dev/hda3 y montar /dev/hda4 (si es que se encuentran referidas en /etc/fstab), tendríamos que repetir casi todos los pasos anteriores para acceder a las particiones.

En concreto, salvo el comando 'swapoff /dev/hda3' (ya que no ha podido ser activada), y el comando 'mke2fs -j /dev/mapper/cryptpart' (que reformatearía la partición con nuestros preciados datos), deberíamos repetir todo el proceso, incluyendo el formato de la partición de intercambio, ya que utilizamos una clave aleatoria y no se conservaría la firma que la indentifica como tal.

Podríamos crearnos nuestros propios scripts para automatizar el proceso, pero afortunadamente, las distribuciones principales están incorporando a sus scripts de inicio soporte para estos dispositivos.

Por ejemplo, Debian proporciona un script de inicio en /etc/init.d/cryptdisks y un fichero de configuración en /etc/crypttab para facilitar la gestión de particiones cifradas.

En nuestro caso añadimos las siguientes líneas al fichero:



cryptswap /dev/hda3 /dev/random swap
cryptpart /dev/hda4


Y alteraremos el fichero /etc/fstab para que acceda a las particiones virtuales añadiendo (o sustituyendo donde corresponda) las siguientes líneas:



/dev/mapper/cryptswap none swap sw 0 0
/dev/mapper/cryptpart /crypto ext3 defaults 0 0


Finalmente debemos activar el soporte para particiones cifradas durante el arranque, editando el fichero /etc/default/cryptdisks:



CRYPTDISKS_ENABLE=Yes


Esto provocará que durante el arranque, después de comprobar las particiones, pero antes de montarlas, evaluará el fichero /etc/crypttab, solicitando la contraseña para la partición de datos. Si se introduce mal la contraseña, no dará error en ese momento, sino al intentar montar la partición, ya que no encontrará un sistema de ficheros válido.

Los que hayan compilado el soporte como módulos deberán, además, añadir el módulo 'dm_mod' al fichero /etc/modules, para que se cargue automáticamente durante el arranque.

Conclusiones

Si bien el mecanismo se puede considerar completamente funcional a nivel de kernel, todavía falta trabajo por realizar por parte de las distribuciones para hacer más transparente esta funcionalidad al usuario, aunque vemos que ya empiezan a incorporar un soporte básico.

Para aquellos preocupados por el rendimiento de un sistema de ficheros sobre un volumen lógico cifrado cabe indicar que se está empleando el mismo mecanismo subyacente desde hace tiempo para implementar el soporte para RAID y volúmenes lógicos genéricos en servidores de alto rendimiento. Considerando además que la velocidad de las operaciones dentro del microprocesador superan por varios órdenes de magnitud a las tasas de transferencia de las unidades de disco más veloces, podemos confiar en que la capa de cifrado no será el cuello de botella en cuanto al rendimiento del sistema de ficheros.

Enlaces relacionados

Página oficial de dm-crypt
http://www.saout.de/misc/dm-crypt

FUENTE: Robota.net (Roberto Sierra Cabrera)

j8k6f4v9j
09-04-2007, 14:47
Buenísimo, sí señor :)

Gracias LUK

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

crass
28-10-2010, 22:48
Hola esto es un tema que me interesa, pero tengo un poblema no me lo monta automatico cuando insecto un pendrive, y eso configurando el fstab y el crypttab, que no lo puedo poner ahora por que no tengo tiempo, a mi me gusta poner mi algoritmo de cifrado como ejemplo el blowfish, hay un comando que ahora no me acuero donde podrias ver todos los algoritmos de cfrado que podrias elegiar, crypsetup --verbose --cipher=blowfish luksFormat /dev/sdb hay un tema que no me gusta, es que según el formato de cryptsetup en su head deja información de encriptado, (aunque no la pueden ver su contenido sin la clave) pero se sabrá que algo se esta ocultando, en eso me gusta más con el cryptoloop que no contiene head y parece que los datos son aleatorios, por ahora yo sigo encryptandolo con el cryptoloop aunque se considera obsoleto, gracias y un salu2.

Fruit
28-10-2010, 23:40
Te has pasado tres años.