Verschlüsselte Container mit dm-crypt
Datum: 27. November 2006 - Kategorie Ubuntu/Debian
Ziel:
Ein verschlüsselter Container, den man bei Bedarf in das Dateisystem einbindet. Dies soll ohne Neukompilieren des Kernels funktionieren und keine besonderen Pakete benötigen - sowie in meinem Fall auch unter Debian Sarge lauffähig sein.
Pakete:
Wir installieren cryptsetup und loop-aes-utils.
1. Erstellen der Containerdatei
An einem beliebigen Ort legen wir die Datei an, die unsere Daten speichern soll - hier 10 GB groß (mit Zufallsdaten gefüllt):
dd if=/dev/urandom of=/home/user/daten.safe bs=1M count=10240
2. Loop-Device
Als root legen wir ein Device an, das einfach auf diese Datei verweist:
losetup /dev/loop0 /home/user/daten.safe
3. Verschlüsselung einrichten
Wir richten nun die Verschlüsselung (Standard: AES mit 256 Bit) auf diesem Device ein - dabei muss das Kennwort angegeben werden:
cryptsetup -y create datensafe /dev/loop0
4. Formatierung
Der Container ist nun im System unverschlüsselt unter /dev/mapper/datensafe vorhanden. Nun richten wir das Dateisystem ein (hier ext2):
mkfs.ext2 /dev/mapper/datensafe
5. Mount
Nach der Formatierung können wir das Device unter einem beliebigen Verzeichnis einhängen (das existieren muss):
mount -t ext2 /dev/mapper/datensafe /mnt/datensafe
Nun kann man auf /mnt/datensafe ganz normal arbeiten, also speziell auch Zugriffsberechtigungen (restriktiv) setzen.
6. Aushängen
umount funktioniert ganz normal, danach noch den Container schließen und das Loopdevice freigeben:
umount /mnt/datensafe/ cryptsetup remove datensafe losetup -d /dev/loop0
Tipp: Automatisierung mit sudo
Der mount/umount-Prozess inklusive Öffnen/Schließen des Loopdevices und des Containers kann man in ein Skript packen und dem User mit sudo die Rechte dafür geben.
#!/bin/sh # datensafe_mount.sh LOOPDEV=/dev/loop0 SAFE=/home/user/datensafe CRYPTNAME=datensafe MNT=/mnt/datensafe FS=ext2 /sbin/losetup $LOOPDEV $SAFE /sbin/cryptsetup create $CRYPTNAME $LOOPDEV /bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT
#!/bin/sh # datensafe_umount.sh LOOPDEV=/dev/loop0 SAFE=/home/user/datensafe CRYPTNAME=datensafe MNT=/mnt/datensafe /bin/umount $MNT /sbin/cryptsetup remove $CRYPTNAME /sbin/losetup -d $LOOPDEV