Inhaltsverzeichnis
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
- eine externe Festplatte /dev/sdc1 oder
- ein Logical Volume /dev/mapper/vg-usbdevices1/lv-usbstick2 oder
- ein RAID-Array /dev/md1
und $NAME der Mapper-Name , den das neue Blockdevice bekommen soll - zum Beispiel
- cr_crypto
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
dm-crypt-Devices können mit cryptsetup resize $NAME vergößert und verkleinert werden.
dmsetup info listet einem alle gemappten Partitionen/Geräte. Alle Aktiven sind schon freigeschaltet und können ohne Passwortabfrage in das System eingebunden werden. Niemals vergessen die Partition mit luksClose zu schließen!!