Ok, die Kaaden-Anleitung liefert einen guten Leitfaden, mir hat er jedenfalls bei den Grundlagen geholfen. Die Jannsen-Anleitung funktioniert aber nicht. Hab zwar gedacht das ich meine Doku ins Wiki stelle, ist mir heute abend aber zu aufwendig.
Hier eine ToDo-Liste, die alles notwendige enthält. Bei mir war die verschlüsselte Partition sda5.
Vorbereitung
Ein paar Mountpunkte einrichten:
Utilities für Keygenerierung installieren:
Code: Alles auswählen
# cd /
# mount cdrom
# apt-get install sharutils
# umount cdrom
PW-Abfrage von USB-Stick einrichten
Die folgende Anleitung ist eine Zusammenfassung mit den notwendigen Korrekturen aus „Festplattenverschlüsselung mit Debian GNU/Linux“ von Andreas Janssen (
http://www.andreasjanssen.de/cryptodisk.html), und „How to setup passwordless disk encryption in Debian Etch“ (
http://wejn.org/how-to-make-passwordles ... setup.html).
Vorbereitung auf einem Windows-PC: USB-Stick mit FAT32 formatieren, Label USBKEY, und mit h2testw (c't, heise) testen, kann im Prinzip auch unter Lenny erfolgen.
Auf dem Debian-Server als root einen Key generieren. Stick wird als
Code: Alles auswählen
# head -c 2880 /dev/urandom | uuencode -m - | head -n 65 | tail -n 64 > key.key
# wc -l key.key
64 key.key
# head -n 3 key.key
# mount -t vfat -o ro /dev/sdx1 /media/usb0
# cp key.key /media/usb0
Den Key Luks bekannt machen:
Code: Alles auswählen
# cd /media/usb0
# cryptsetup luksAddKey /dev/sda5 key.key
Es erfolgt eine Passwort-Abfrage. Das Boot-PW verwenden.
In der crypttab kann man der Partition ein Keyscript zuweisen, welches den Schlüssel besorgt und ihn ausgibt. Dieses Skript wird, sofern es in der crypttab eingetragen ist, automatisch in die initrd übernommen, wenn diese neu erstellt wird. Es muss alle zum Erlangen des Schlüssels notwendigen Schritte übernehmen, das beinhaltet das Laden der Treiber für den USB-Stick, das Anlegen eines Mountpunktes, das Mounten, die Ausgabe des Schlüssels und das Aushängen des USB-Sticks. Das Skript wird im laufenden Betrieb außer in der initrd nicht benötigt und kann zum Beispiel in /root oder /usr/local/sbin angelegt werden.
Da cryptsetup den Schlüssel in der Standardausgabe des Skriptes erwartet, wird die Ausgabe aller anderen Programmaufrufe im Skript in die Fehlerausgabe umgelenkt (1>&2).
Funktionsgetestetes Keyscript, abgelegt in /usr/local/sbin/usbload.sh:
Code: Alles auswählen
#!/bin/sh
modprobe usb-storage 1>&2 #Kernelmodul für den USB-Stick laden
modprobe vfat > /dev/null 1>&2 # vfat für Stick laden
sleep 5 #5 Sekunden warten damit der Stick bereit ist
mkdir -p /tmpusb 1>&2 #Mountpunkt anlegen, -p damit bei vorhandensein nicht gemeckert wird.
mount -t vfat -o ro /dev/sdb1 /tmpusb 1>&2 #Stick mounten
cat /tmpusb/key.key #Schlüssel ausgeben
umount /tmpusb 1>&2 #USB-Stick aushängen
Hinweis1:
dieses Script sollte bevorzugt auf einem Linux-Rechner erstellt werden. Eine auf einem Windows-Rechner erstellte Datei muss erst ins Linux-Format gewandelt werden. Geht zum Beispiel mit Notepad++.
Hinweis2:
der shabäng muss lauten: #!/bin/sh, ein Versuch mit bash geht zwar zum Testen unter root, wird aber eingefügt in die initramfs mit einem Fehler „Keyscript not found“ quittiert.
Hinweis3:
Das Anlegen des Mountpoints geschieht mit der -p-Option, damit beim 2ten und weiteren Aufrufen nicht gemeckert wird das der Mountpoint schon vorliegt und das Skript abbricht.
Nachbehandlung des Skripts
Code: Alles auswählen
# cp /media/usb0/usbload.sh /usr/local/sbin
# cd /usr/local/sbin
# chown root.root usbload.sh
# chmod u+rx usbload.sh
Treiber in der initrd
Außerdem muss noch sichergestellt werden, daß die initrd alle nötigen Treiber enthält. update-initramfs fügt automatisch die Module für USB-Speicher hinzu. Die Module für das auf vielen USB-Sticks verwendete FAT-Dateisystem muss man aber ausdrücklich anfordern. Dazu werden in der Datei /etc/initramfs-tools/modules folgende Zeilen hinzugefügt:
Einfügen:
Als vorletztes muss nun die crypttab angepasst werden. Im root-Terminal ausführen:
Beispiel der crypttab nach dem Editieren:
Code: Alles auswählen
sda5_crypt /dev/sda5 key.key luks,keyscript=/usr/local/sbin/usbload.sh
Nun wird eine Kopie der alten initrd in /boot erstellt. Und als letztes wird dann eine neue initrd erstellt (die xxx durch den richtigen Text aus Deinem Kernel ersetzen):
Code: Alles auswählen
# cd /boot
# cp initrd.img-2.6.xxx initrd.img-2.6.xxx-safe
# cd /
# update-initramfs -u all
update-initramfs: Generating /boot/initrd.img-2.6.xxx
Damit solltest Du eigentlich Erfolg haben.
Mfg rh