Usando dmcrypt para encriptar particiones
Artículo traducido de: http://deb.riseup.net/storage/encryption/dmcrypt/
Aquí se explica como usar dm-crypt. Dm-crypt es más rápido que cryptoloop y mas fácil que loop-aes. Eche un vistazo de todas formas a cryptoloop (obsoleto) o a loop-aes (más seguro, más rápido).
Desde el sitio web
Device-mapper es una nueva infraestructura en el kernel Linux 2.6 que provee una forma genérica para crear capas virtuales de dispositivos de bloques que puede ejecutar diferentes acciones sobre los dispositivos de bloques reales como striping, concatenación, espejo, snapshoting, etc... Device-mapper es usado por las herramientas LVM2 y EVMS2. dm-crypt es como un device-mapper que provee encriptación transparente de los dispositivos de bloques usando el nuevo cryptoapi del Linux 2.6. Las escrituras a este dispositivo serán encriptadas y las lecturas desencriptadas. Puede montar sus sistema de ficheros como siempre. Pero sin la clave usted no podrá acceder a sus datos. Esto es básicamente lo mismo que cryptoloop pero su código es mucho más limpio y una interfaz de configuración más flexible. El formato on-disk es también compatible.
- sitio web: www.saout.de/misc/dm-crypt/
- wiki dm-crypt: www.saout.de/tikiwiki/
- velocidad de ciphers: fp.gladman.plus.com/cryptography_technology/aesr2/
Instalar el kernel
El kernel-image 2.6 por defecto parece funcionar perfectamente. Si usted esta compilando el suyo propio, esto es lo que debe elegir:
- Code maturity level options --->
- on: Prompt for development and/or incomplete code/drivers
- General setup --->
- on: Support for hot-pluggable devices
- Device Drivers > Multi-device support (RAID and LVM).
- on: Device mapper support
- on: Crypt target support
- Cryptographic options --->
- on: AES cipher algorithms
Los drivers de desarrollo deben estar activados, sino no podrá activar el soporte crypt target para device mapper. Habilitando el soporte para dispositivos hot-pluggable se contruye udev en el kernel, que hace las cosas más fáciles. Si activa udev, asegúrese de no activar devfs.
Con su nuevo kernel corriendo, chequee que device mapper existe:
# ls -L /dev/mapper/control
Si no tiene el dispositivo mapper, instalando el paquete dmsetup lo creará para usted.
También chequee si AES está soportado (o cualquier otro cipher que decida usar):
#cat /proc/crypto
debería devolver:
name : aes module : aes type : cipher blocksize : 16 min keysize : 16 max keysize : 32
Si está corriendo crypto como módulos, no verá nada cuando mire /proc/crypto hasta que el módulo no esté cargado. cryptsetup cargará los módulos que necesite cuando esté corriendo. Si quiere cargar el módulo manualmente, usando el kernel de debian 2.6.7, debería hacer esto:
# instmod /lib/modules/2.6.7-1-386/kernel/crypto/aes.ko
O simplemente:
# modprobe aes
Instalar las herramientas de usuario
dmsetup
Instale dmsetup, la libreria de espacio de usuario para el Device Mapper del kernel linux:
# apt-get install dmsetup
Al instalar este paquete se crearán los dispositivos mapper en caso de que no existan.
Compruebe que el target crypt está soportado:
# dmsetup targets crypt v1.0.0 striped v1.0.1 linear v1.0.1 error v1.0.1
(Si está usando un kernel basado en módulos, este se cargará cuando sea necesario).
cryptsetup
cryptsetup es una herramienta que facilita el uso de dm-crypt, así no tendrá que hacer las llamadas a dm-setup directamente.
# apt-get install cryptsetup
Siguientes pasos
Ahora debe decidir si desea utilizar una particion o un fichero loop como dispositivo que usará el device mapper.
Particiones encriptadas
Estas son las instrucciones para usar dm-crypt para crear un sistema de ficheros en una partición. Vea mas abajo para como hacerlo con un fichero loopback.
Creando la partición encriptada
Para crear nuestra partición encriptada, debemos seguir tres pasos:
- ejecutar cryptsetup en la partición, esto crea el dispositivo device mapper con el target 'crypt'.
- Crear el sistema de ficheros en nuestro nuevo dispositivo.
- montar nuestro dispositivo.
En nuestro ejemplo, convertiremos el volumen físico /dev/sda9 en un volumen lógico (encriptado) en /dev/mapper/maildir (la etiqueta es 'maildir') y lo montaremos en /var/maildir.
Cree el volumen lógico (con el binario cryptsetup):
# cryptsetup -y create maildir /dev/sda9
o cree el volumen lógico (con el script cryptsetup que viene con el paquete hashalot):
# cryptsetup -c aes -h ripemd160 -s 32 create maildir /dev/sda9
confirme que está funcionando:
#dmsetup ls maildir (254, 0)
cree el sistema de ficheros:
# mkfs.reiserfs /dev/mapper/maildir
monte el sistema de ficheros:
# mount /dev/mapper/maildir /var/maildir
Uso en el mundo real
Cada vez que reiniciemos, necesitamos volver a ejecutar crypsetup e introducir la misma contraseña. En caso de introducir la contraseña incorrectamente, el dispositivo encriptado no se podrá montar y necesitaremos destruirlo y volver a intentarlo. No se preocupe: si no formateamos el dispositivo creado con la contraseña incorrecta, no se perderá ningún dato.
Hay dos formas de hacer esto: en el inicio o ejecutando un script manualmente.
En el inicio
Puede editar /etc/fstab para tener /dev/mapper/maildir montado en /var/maildir. Esto sólo funcionará si cryptsetup está corriendo antes de que las particiones sean leídas por /etc/fstab.
/etc/init.d/cryptinit:
if [ -b /dev/mapper/maildir ]; then /usr/bin/cryptsetup remove maildir fi /usr/bin/cryptsetup create maildir /dev/sda9
# cd /etc/rcS.d # ln -s ../init.d/cryptinit S08cryptinit
A mano
Simplemente ejecute este script para tener la partición funcionando:
if [ -b /dev/mapper/maildir ]; then /usr/bin/cryptsetup remove maildir fi /usr/bin/cryptsetup create maildir /dev/sda9 mount /dev/mapper/maildir /var/maildir
Particiones home dmcrypt
Para que pam monte su partición encriptada automáticamente en el login, por favor haga los siguientes cambios:
# apt-get install libpam-mount cryptsetup openssl
añada esto al final de /etc/pam.d/common-auth
auth optional pam_mount.so use_first_pass
y esto al final de /etc/pam.d/common-session
session optional pam_mount.so
(alternativamente, puede añadir "@include common-pammount" al final de common-auth y common-session).
añada esto a /etc/security/pam_mount.conf
volume elijah crypt - /dev/hda4 /home/elijah cipher=aes aes-256-ecb /home/elijah.key
(en este caso, 'elijah' es el nombre de usuario).
cree /home/elijah.key:
echo "my dmcrypt password" | openssl aes-256-ecb > /home/elijah.key
(esto no es buena idea porque tu password se queda en tu fichero de historial!) Esto te preguntará por tu password. Debes introducir la contraseña de tu usuario. Este comando encriptará tu contraseña dmcrypt (usada para montar la partición dmcrypt) con la contraseña de tu usuario. Cuando te logueas, pam-mount usa la password de tu usuario para desencriptar el fichero .key, entonces usa la password en el fichero .key para montar tu directorio home.
Alternativamente, si las contraseña de tu usuario y la de dmcrypt es la misma, la linea en /etc/security/pam_mount.conf sería como esta:
volume elijah crypt - /dev/hda4 /home/elijah cipher=aes - -
Edite /etc/login.defs:
CLOSE_SESSIONS yes
(sino tu partición encriptada no se desmontará cuando hagas logout).
Si está utilizando sarge o una versión mas antigua, necesita añadir el enlace simbólico /sbin/mount.crypt -> /usr/bin/mount.crypt ya que ahora mount -t crypt funciona (debian bug: #267285).
Tu home puede ser un fichero loopback. Siga las instrucciones normales para loopback y especifiquelo en /etc/sercurity/pam_mount.conf:
volume elijah crypt - /home/home.img /home/elijah loop,cipher=aes aes-256-ecb /home/home.keyLa única diferencia con usar una partición real es que tu dispositivo fuente es el nombre del fichero loopback, y que añadimos 'loop' a nuestra lista de opciones.
Loopback encriptado
Aquí se explica como usar dm-crypt para crear un sistema de ficheros en un archivo loopback, esto significa almacenar un sistema de ficheros encriptado en un fichero individual. Es útil si usted no puede o no quiere encriptar su partición entera. Vea arriba para saber como encriptar una partición entera.
Si usted ya tiene un sistema de ficheros, como tu directorio /home, que quiere encriptar pero no puede destruir el sistema de ficheros y recrearlo otra vez. O si sólo quiere encriptar parte de él, puede hacer con un fichero loopback encriptado con dm-crypt.
Instalación
Siga las mismas instrucciones que para las particiones, pero deténgase antes de instalar cryptsetup.
Crear el loopback
Debe crear un fichero loopback, esto es sólo un fichero normal en tu sistema de ficheros creado con datos aleatorios. Haga el fichero loopback tan grande como quiera que sea su loopback encriptado.
Lo siguiente crea un fichero de 100 megas con datos aleatorios en /home/secret:
# dd if=/dev/urandom of=/home/secret bs=1M count=100
Ponga este fichero como un dispositivo loopback:
# losetup /dev/loop0 /home/secret
Encriptar el loopback
Debe seguir tres pasos para encriptar su fichero loopback:
- ejecute cryptsetup en el fichero loopback, esto crea un dispositivo device mapper con el target 'crypt'.
- cree el sistema de ficheros en su nuevo dispositivo
- monte su nuevo dispositivo
En nuestro ejemplo convertiremos el fichero /home/secret en el dispositivo encriptado /dev/mapper/mycrypt (la etiqueta es 'mycrypt') y luego lo montaremos en /mnt/sekret:
cree el volumen lógico (con el binario cryptsetup):
# cryptsetup -y create mycrypt /dev/loop0
confirme que ha funcionado:
# dmsetup ls mycrypt (254, 0)
cree el sistema de ficheros:
# mkfs.ext3 /dev/mapper/mycrypt
monte el sistema de ficheros:
# mount /dev/mapper/mcrypt /mnt/sekret
puede añadir algo como lo siguiente a su /etc/fstab:
/dev/mapper/mcrypt /mnt/sekret ext3 noauto,noatime 0 0
Cuando termine de su usar su loopback encriptado es necesario que lo desmonte y elimine el dispositivo creado en devicemapper, si no hace esto, cualquiera podrá volver a montarlo sin teclear la contraseña!
# umount /mnt/sekret # cryptsetup remove mycrypt
Cree un script para iniciarlo y montarlo mas fácilmente:
#!/bin/sh losetup /dev/loop0 /home/secret cryptsetup create mycrypt /dev/loop0 mount /dev/mapper/mycrypt /mnt/sekret
Lvm2 sobre dmcrypt
Por defecto lvm2 no considera los dispositivos de bloques device-mapper (como un dispositivo dm-crypt) para ser usados como volúmenes físicos.
Para usar un dispositivo dm-crypt como un lvm2 pv, añada esta linea a los dispositivos de bloques en /etc/lvm/lvm.conf:
types = [ "device-mapper", 16]
Si /etc/lvm/lvm2.conf no existe, puede crear uno basado en su configuracion o la configuración por defecto con:
# lvm dumpconfig > /etc/lvm/lvm.conf