cryptsetup ist ein Tool um dm-crypt-Devices zu kontrollieren.

Lizenz: GPL 2

Mini-Howto

Ist $BLOCKDEVICE ein Blockdevice, das verschlüsselt werden soll - zum Beispiel

und $NAME der Mapper-Name , den das neue Blockdevice bekommen soll - zum Beispiel

so kann man mit folgendem Kommando das Blockdevice aufsetzen.

cryptsetup --cipher aes --key-file $KEYFILE create $NAME $BLOCKDEVICE

Es kann eben so einfach wieder entfernt werden.

cryptsetup remove $NAME

Nachdem man ein Dateisystem auf /dev/mapper/$NAME erzeugt hat, sollte es problemlos zu mounten sein.

LUKS Erweiterung

LUKS("Linux Unified Key Setup") ist ein Standard für Festplattenverschlüsselung. Er standardisiert den Partitions-Header und das Format der Daten. LUKS unterstützt mehre Schlüssel in sogenannten "slots" die mit Hilfe von PBKDF2 gegen Wörterbuchattacken geschützt werden.

Schnellanleitung - LUKS-Partition erstellen

Um sich ein bisschen Tipparbeit zu ersparen existiert ein Wrapperscript namens luksformat. Ein kleines Perl-Script, dass einem dabei hilft eine Cryptopartion zu erstellen.

luksformat [-t fstype] device

Beispiel:

luksformat -t ext4 /dev/sdc1

Die Partition ist danach verschlüsselt und mit dem über -t gewünschten Dateisystem versehen.

Schritt für Schritt - LUKS Partition erstellen

Schön wenn es schnell geht. Aber auch ganz nett wenn man weiß was da passiert ist :)

Im Folgenden wird als $BLOCKDEVICE eine Platte /dev/sdc1 benutzt. Es könnte aber auch ein Logical Volume "lv-usbstick2" in einer Volume Group "vg-usbdevices1" sein, dann würde dies durch /dev/mapper/vg-usbdevices1/lv-usbstick2 zu ersetzen sein.

man cryptsetup für mehr Informationen.

1. LUKS-Partition initialisieren

cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 /dev/sdc1

2. LUKS-Partition öffnen und mapping erstellen

Öffnen mit Passwort

cryptsetup luksOpen /dev/sdc1 cr_crypto

Öffnen mit Keyfile

Siehe Key-File erstellen und hinzufügen

cryptsetup luksOpen -d /etc/.crypto/cr_crypto.keyfile /dev/sdc1 cr_crypto

3. Dateisystem erstellen

mkfs.ext4 -m0 /dev/mapper/cr_crypto

Die "-m" Option reserviert soviel Prozent (hier: 0 Prozent) des Speichers für den Superuser. Vergisst man die Option anzugeben, werden standardmäßig 5% des Speicherplatzers für den Superuser reserviert.

4. LUKS-Partition schließen

cryptsetup luksClose cr_crypto

LUKS-Partitionen verwenden

Die Schritt-für-Schritt-Anleitung beinhaltet im Grunde genommen schon die Befehle die notwendig sind, um mit der erstellten Partition zu arbeiten. Aber ich werde sie der Vollständigkeit halber nochmal erwähnen.

Partition ein- / aushängen

mount

cryptsetup luksOpen /dev/sdc1 cr_crypto
cryptsetup status /dev/mapper/cr_crypto
mount /dev/mapper/cr_crypto /media/crypto

Mit diesen Befehlen wird die Partition geöffnet, Statusinformation angezeigt, mit dem Namen gemapped und schließlich unter /media/crypto in das System eingebunden.

umount

umount /media/crypto
cryptsetup luksClose cr_crypto

/etc/crypttab

In Anlehnung an die bekannte fstab werden auch hier zeilenweise Angaben über die Dateisysteme gemacht. Für unser Beispiel würde ein Eintrag wie folgt aussehen.

# /etc/crypttab
# <target name> <source device>      <key file>                      <options>
  cr_crypto     /dev/sdc1            none                            luks,noauto

# alternativ: das Crypto-Device beim Boot automatisch mit dem Keyfile öffnen
# cr_crypto     /dev/sdc1            /etc/.crypt/cr_crypto.keyfile   luks

# noch sicherere Alternative:
# das Crypto-Device per UUID ansprechen und ebenfalls beim Boot automatisch mit dem Keyfile öffnen
#
# UUID feststellen mit # blkid Kommando, die UUID des $BLOCKDEVICES wird hier benötigt:
# cr_crypto   /dev/disk/by-uuid/4ce2e766-c8d1-68ed-9bd5-053a12345657 /etc/.crypt/crypt250.keyfile luks

/etc/fstab

Der entsprechende Eintrag zum Mounten des Cryptodevices in der fstab sieht so aus

/dev/mapper/cr_crypto /media/crypto     ext4       acl,user_xattr,nofail,noauto    1 2

Mit cryptdisks_start und cryptdisks_stop kann die Partition dann geöffnet und geschlossen werden.

Der eigentliche Sinn dieser Datei ist das mappen des Cryptodevice bereits beim Systemstart. Mit der Option noauto wird das Gerät beim Booten ignoriert. Ohne diese Option wird man beim Systemstart nach dem dazugehörigen Passwort gefragt und nach erfolgreicher Verifizierung, wird die Partition unter dem Zielnamen abgebildet. Sorgt man für einen entsprechenden Eintrag in /etc/fstab wird die Partition dann auch direkt eingehängt.

The noauto means that mount should not try to mount it automatically (the /etc/init.d/boot.crypto does it), and the nofail means "Do not report errors for this device if it does not exist". The fsck is done by the boot script if necessary.

Weitere Informationen: man crypttab

Mapperdevicestatus anzeigen

cryptsetup status $NAME

cryptsetup status cr_crypto
cryptsetup status /dev/mapper/cr_crypto

Schlüsselstatus anzeigen / Schlüssel hinzufügen / entfernen

cryptsetup luksDump /dev/sdc1

hinzufügen

cryptsetup luksAddKey /dev/sdc1

Nach Eingabe eines bereits zugewiesenen Passworts wird man nach dem neuen Passwort gefragt.

Enter any LUKS passphrase:
key slot 0 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.

entfernen

cryptsetup luksKillSlot /dev/sdc1 1

Enter any remaining LUKS passphrase:
key slot 1 verified.
Command successful.

Keyfile erstellen und hinzufügen

Anstelle eines Passworts kann man auch eine Datei (Keyfile) verwenden. Dieses kann man auf einer bereits verschlüsselten Partition ablegen und zum Entsperren weiterer verschlüsselter Partitionen benutzen. Eine weitere Möglichkeit wäre die Speicherung und Benutzung eines USB-Stick oder die zusätzliche Abspeicherung in /etc/.crypt, um damit wie oben beschrieben den Cryptospeicher automatisch beim Booten öffnen lassen zu können.

Keyfile erstellen und sicher speichern

# dd if=/dev/urandom of=/etc/.crypto/cr_crypto.keyfile bs=1 count=256
# chown root:root /etc/.crypto/*
# chmod 000 /etc/.crypto/*

Mit diesem Befehl werden von urandom 256 Byte Zufallswerte in die Datei /etc/.crypto/cr_crypto.keyfile kopiert. Die Größe orientiert sich an der mit -s übergebenen Schlüsselgröße, siehe LUKS-Partition initialisieren.

Keyfile hinzufügen

cryptsetup luksAddKey /dev/sdc1 /etc/.crypto/cr_crypto.keyfile

Cryptodevice-Header in einer Datei sichern

cryptsetup luksHeaderBackup --header-backup-file /etc/.crypto/cr_crypto.header /dev/sdc1
# chown root:root /etc/.crypto/*
# chmod 000 /etc/.crypto/*

Externe verschlüsselte Festplatte mit LVM einhängen

Im folgenden wird angenommen, dass eine externe Festplatte mit verschlüsselter Volumegroup vg-usb-platte und darin logical volume crypt gemountet werden soll.

# pvscan
# vgchange -a y

Volumegroups anzeigen
# lvdisplay

Logical Volume mit Passwort unter dem Mappernamen cr_usb_crypto öffnen und verfügbar machen
# cryptsetup luksOpen /dev/mapper/vg--usb-platte-crypt cr_usb_crypto oder
# cryptsetup luksOpen /dev/vg-usb-platte/crypt cr_usb_crypto

oder mit Keyfile
# cryptsetup luksOpen -d /path-to-cryptofile/cr_usb_crypto.keyfile /dev/mapper/vg--usb-platte-crypt cr_usb_crypto oder
# cryptsetup luksOpen -d /path-to-cryptofile/cr_usb_crypto.keyfile /dev/vg-usb-platte/crypt cr_usb_crypto

Achtung, das folgende Kommando ist nur der Vollständigkeit hier, wenn man die Platte formatieren will
# mkfs.ext4 -m0 /dev/mapper/cr_usb_crypto

optional den Status anzeigen
# cryptsetup status /dev/mapper/cr_usb_crypto oder
# cryptsetup status cr_usb_crypto

Platte einhängen
# mount /dev/mapper/cr_usb_crypto /media/crypt-usb

optional zur Sicherheit ein Backup des gesamten Headers speichern, sofern dies noch nicht erfolgt ist
# cryptsetup luksHeaderBackup --header-backup-file <fn> /dev/mapper/vg--usb-platte-crypt oder
# cryptsetup luksHeaderBackup --header-backup-file <fn> /dev/vg-usb-platte/crypt

Tipps & Tricks

Links

cryptsetup (zuletzt geändert am 2011-11-21 06:36:46 durch ThomasGries)