Usando dmcrypt para encriptar particiones

2006-09-03 por Angel Abad, etiquetado como debian

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.

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.key
La ú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