dmcrypt e' un sistema per crittare partizioni, chiavette USB, cd, dvd o qualunque altro supporto di archiviazione di massa.
Il dmcrypt e' il successore del cryptoloop come sistema di crittazione di partizioni presente nel kernel linux. A differenza del cryptoloop pero' il dmcrypt non necessita di patch per il kernel e per il pacchetto util-linux. Il cryptoloop ha un problema di sicurezza (non molto grave), ed e' quindi consigliato passare al dmcrypt, che viene anche sviluppato molto piu' attivamente.
dmcrypt si appoggia sul device-mapper, un sistema presente nel kernel linux dalla versione 2.6, e utilizza le cryptoapi presenti nel kernel 2.6
homepage: http://www.saout.de/misc/dm-crypt/
INSTALLAZIONE:
Per sapere se il vostro kernel e' stato compilato con il supporto per dmcrypt, potete utilizzare il comando:
# cat /proc/config.gz | grep DM
oppure verificate il vostro /usr/src/linux/.config
e verificate che queste due opzioni siano presenti (indicano il supporto per il device mapper e il dmcrypt nel kernel, come modulo o statico)
CONFIG_BLK_DEV_DM=m oppure CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=m oppure CONFIG_DM_CRYPT=y
se invece il supporto non e' attivato dovrete ricompilare il kernel. Le opzioni per attivare il supporto le trovate nella sezione
Device Drivers
--> [*] Multi-device support (RAID and LVM)
--> [*] Device Mapper
--> [*] Crypt Target Support
Se avete compilato il device-mapper come modulo dovete caricarlo con
# modprobe dm_mod
il modulo dm_crypt invece dovrebbe autocaricarsi quando serve.
Sempre nel kernel verificate anche la presenza del supporto per gli argomenti di cifratura e di digest (sezione Cryptographic options).
Oltre a questo vi serve avere il pacchetto device-mapper installato, pacchetto che e' comunque presente ormai in tutte le principali distribuzioni linux.
E' possibile usare il dmcrypt direttamente, ma la procedura e' complicata, piu' comodo appoggiarsi al cryptsetup, un'applicazione per il setup che e' possibile scaricare dalla homapega ufficiale di dmcrypt.
il cryptsetup richiede libgcrypt e libdevmapper.
Se non usate devfs o udev lanciate lo script devmap_mknod.sh distribuito con il pacchetto device-mapper.
per l'utilizzo di cryptsetup lanciate
$ cryptsetup --help
e otterrete questo:
cryptsetup [OPTION...] <action> <name> [<device>]
le opzioni piu' importanti sono:
-c per specificare l'algoritmo a usare per la crittazione (fate cat /proc/crypto per vedere la lista degli algoritmi disponibili) l'algoritmo usato di default e' aes -h l'hash usato per creare la chiave di crittazione dalla passphrase (il default e' ripemd160) -s la dimensione della chiave di crittazione (di default sono 256 bit)
<action> invece definisce cosa deve fare il cryptsetup: create per creare un device remove per rimuovere un device reload per modificare il device attivo resize per ridimensionare il device attivo status per visualizzare informazioni sul device attivo
<name> e' il nome del device cosi' come compare sotto /dev/mapper/, a nostra scelta.
<device> e' il device crittato (es. /dev/loop0 ... /dev/loop7)
ipotizziamo di voler creare un container (un file che conterra' i nostri dati crittati) di 200 Mb, che useremo per tenerci tutta la nostra posta.
il file container sara' /usr/local/container_posta
il nome del device gestito da devicemapper sara' dmcrypt_posta
il nome del device che useremo sara' /dev/loop4
il mount point sara' /home/utente/mail (Se la vostra posta e' attualmente in /home/utente/mail spostatela da un'altra parte)
Alcune delle seguenti operazioni andranno eseguite come root:
la prima cosa da fare e' creare il container di 200 Mb:
$ dd if=/dev/zero of=/usr/local/container_posta bs=1M count=200
adesso impostiamo il loop device associandolo al container:
$ losetup /dev/loop4 /home/utente/container
ora creiamo il device crittato:
$ cryptsetup -c aes -y create dmcrypt_posta /dev/loop4
vi sara' chiesta la password che proteggera' il filesystem crittato
formattiamo il file system (ext3):
$ mke2fs -j /dev/mapper/dmcrypt_posta
e infine montiamolo per vedere se funziona:
$ mount /dev/mapper/dmcrypt_posta /home/utente/mail
ora possiamo trasferire tutta la nostra posta in /home/utente/mail
Prima di spegnere il PC ricordatevi di smontare il file system usando questa sequenza di comandi, che smontano il file system, rimuovono il device ed effettuano il deattach del loop device
$ umount /home/utente/mail
$ cryptsetup remove posta_dmcrypt
$ losetup -d /dev/loop4
Per l'utilizzo quotidiano conviene crearsi uno script come questo che semplifica i vari passaggi:
#!/bin/bash
UTENTE=`whoami`
if [ "$UTENTE" != "root" ] ; then
echo "Devi essere root per usare questo script!!!!!"
exit 0
fi
function freeloop ()
{
FREELOOP=""
FREELOOP=`losetup -f`
}
# test per dmcrypt
if test $# != 2
then
echo "Syntax: $0 1|2|3 ( 1=container1, 2=posta, 3=home) on|off"
exit 100
fi
CIPHER=aes
HASH=rmd160
freeloop
case "$1" in
1)
CONTAINER=/home/utente/container
NAME=secret1
MPOINT=/mnt/dmcrypt
LOOP=$FREELOOP
;;
2)
CONTAINER=/usr/local/container_posta
NAME=posta
MPOINT=/home/utente/mail/
LOOP=$FREELOOP
;;
3)
CONTAINER=/mnt/usbpen1G
NAME=myhome
MPOINT=/home/utente
LOOP=$FREELOOP
;;
*)
echo "Il primo parametro definisce il container da usare"
echo "1 - container 2 - posta 3 - home"
exit 1
;;
esac
case "$2" in
on)
if grep /dev/mapper/$NAME /etc/mtab > /dev/null; then
echo "$MPOINT e' gia' montato"
exit 1
fi
echo "mounting $CONTAINER on $MPOINT using loop $FREELOOP and name $NAME"
losetup $LOOP $CONTAINER
cryptsetup -c $CIPHER create $NAME $LOOP
mount /dev/mapper/$NAME $MPOINT
df -hP /dev/mapper/$NAME
;;
off)
# find the loop device
LOOP=`cryptsetup status $NAME | grep device | awk '{print $2}'`
if grep /dev/mapper/$NAME /etc/mtab > /dev/null; then
fuser -m $MPOINT > /dev/null && echo "IMPOSSIBILE SMONTARE $MPOINT, \
qualcosa sta accedendo al filesystem...." && fuser -vm $MPOINT || \
(umount $MPOINT; cryptsetup remove $NAME; losetup -d $LOOP; echo "$CONTAINER unmounted from $MPOINT")
else
echo $MPOINT is not mounted
if [ -e /dev/mapper/$NAME ]; then
echo "Removing the mapper " $NAME
cryptsetup remove $NAME
losetup -d $LOOP
fi
fi
;;
check)
if grep /dev/mapper/$NAME /etc/mtab > /dev/null; then
echo "$MPOINT e' montato, per fare il check devi smontarlo"
exit 1
fi
echo "mounting $CONTAINER on $MPOINT"
losetup $LOOP $CONTAINER
cryptsetup -c $CIPHER create $NAME $LOOP
read -p "sicuro di voler fare un e2fsck su questo container (y|n) ?" check
if [ $check = "y" ] ; then
e2fsck /dev/mapper/$NAME
$0 $1 off
else
exit
fi
;;
status)
cryptsetup status $NAME
echo
df -hP /dev/mapper/$NAME
;;
*)
echo "Il secondo parametro definisce l'azione (on|off|check|status)"
exit 1
;;
esac