Cryptsetup mit systemd und Schlüssel auf externem USB-Stick

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Sicherheit ‹ Cryptsetup mit systemd und Schlüssel auf externem USB-Stick



Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


Review.png Review: Dieser Artikel ist für das Review freigegeben.


Wenn du dein System mit Cryptsetup verschlüsselt und den Key auf einem externen USB-Speicherstick hast, der beim Booten eingesteckt sein muss, damit dein System automatisch entschlüsselt werden kann, dann bist du hier richtig.

Debian

Einführung

Folgende Anleitung funktionierte bis vor systemd viele Jahre ausgezeichnet: Entschlüsseln mit Key auf USB-Stick - wiki.ubuntuusers.de Seit systemd fällt diese Anleitung aber am keyscript, welches systemd nicht unterstützt.

Allgemeines

systemd arbeitet mit unit-Files, welche teilweise durch Parsen von Konfigurationsfiles erstellt werden. Mit diesen unit-Files arbeiten wir hier und verändern diese, wie auch die Konfigurationsfiles /etc/fstab und /etc/crypttab

Installation

Du legst deine verschlüsselten Partitionen und auch den Key auf dem externen USB-Speicherstick genauso wie im oben genannten Wiki-Artikel auf wiki.ubuntuusers.de an. Allerdings geht es ab (inklusive) dem Punkt "Anlegen der nötigen Konfigurationsdateien" hier anders weiter.

Konfiguration

Die id des USB-Sticks, auf dem du den Schlüssel abgelegt hast, ermittelst du mit diesem Befehl. (Dazu musst du wissen, welches Gerät dem Stick zugewiesen wurde. Hier ist es /dev/sdb)

user@debian:~$ ls -l /dev/disk/by-id/
lrwxrwxrwx 1 root root  9 2011-12-20 21:36 usb-XyzFlash_XYZDFGHIJK_XXYYZZ00AA-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 2011-12-20 21:36 usb-XyzFlash_XYZDFGHIJK_XXYYZZ00AA-0:0-part1 -> ../../sdb1

Anpassen von /etc/crypttab

Der wesentliche Unterschied zur oben genannten Anleitung findet sich in der crypttab. Diese muss nun folgendermaßen angepasst werden:

# <target name>	<syntaxhighlight device>		<key file>	<options>
lvm UUID=xxYYzz0011-xyz4-1x2y-xxxx-xyxyxyxyxyxyzzz /dev/disk/by-id/usb-XyzFlash_XYZDFGHIJK_XXYYZZ00AA-0:0 luks,tries=3,keyfile-size=2048,keyfile-offset=512

Besonderheiten

Mit diesen Angaben wird das selbe erreicht wie im ubuntuusers-Artikel. Nur hier müssen direkt die Bytes angegeben werden, da systemd offenbar nicht mit dd arbeitet.

Das Offset beträgt 512 Byte (entspricht Offset 1 bei bs=512), und die Schlüssellänge sind 2048 Byte (entspricht DECRYPTKEYDEVICE_READBLOCKS="4" aus dem Skript "decryptdevice.sh" aus der originalen Anleitung)

systemd-Unitfile

Hast du die crypttab entsprechend angepasst, kannst du mit einem beherzten

root@debian:~# systemctl --system daemon-reload

die systemd die neuen Unitfiles erzeugen lassen.

Für das lvm findest du dieses unter /run/systemd/generator/systemd-cryptsetup@lvm.service mit folgendem Inhalt

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=cryptsetup.target
RequiresMountsFor=/dev/disk/by-id/usb-XyzFlash_XYZDFGHIJK_XXYYZZ00AA-0:0
BindsTo=dev-disk-by\x2duuid-xxYYzz0011\x2dxyz4\x2d1x2y\x2xxxx\x2dxyxyxyxyxyxyzzz.device
After=dev-disk-by\x2duuid-xxYYzz0011\x2dxyz4\x2d1x2y\x2dxxxx\x2dxyxyxyxyxyxyzzz.device
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'lvm' '/dev/disk/by-uuid/xxYYzz0011-xyz4-1x2y-xxxx-xyxyxyxyxyxyzzz' '/dev/disk/by-id/usb-XyzFlash_XYZDFGHIJK_XXYYZZ00AA-0:0' 'luks,tries=3,keyfile-size=2048,keyfile-offset=512'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'lvm'

Dieses File kannst du nach /etc/systemd/system kopieren und dort entsprechend deinen Bedürfnissen anpassen. Die Verschlüsselung des Systems mit einem externen Key funktioniert aber auch mit der angepassten crypttab alleine auch.



Manpages

 man systemd-cryptsetup@.service 
 man systemd-cryptsetup-generator

Weblinks

Entschlüsseln mit Key auf USB-Stick - wiki.ubuntuusers.de