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)
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)