[erl] USB-Stick als Schlüssel für Festplattenverschlüsselung

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

[erl] USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 19.11.2009 17:51:22

Hallo Experten,

gehöre noch zu den Linux-Einsteigern, also bitte seid nachsichtig. :wink:
Ich habe eine Debian Installation mit RAID1, LVM und Verschlüsselung aufgesetzt. Es gibt zwei MD Arrays, wobei nur das zweite verschlüsselt ist (erstes ist „boot“). Danach setzte ich LVM und die logischen Volumes auf.
Da es sich um einen Server handelt, möchte ich nicht bei jedem Neustart die Passphrase eingeben. Habe im Netz auch eine Anleitung gefunden, wie man dies mit einem USB-Stick realisieren kann. Nur klappt es bei mir leider nicht. :wink:
Ich denke, das Problem ist bei mir, dass md1 verschlüsselt ist. Also LVM auf einem verschlüsselten Volumen läuft.
Die Abfrage der Passphrase kommt somit vor der Abarbeitung von fstab wo die Volumes (inkl. USB-Stick mit Key) eingehängt werden. So erkläre ich es mir jedenfalls.
Hat vielleicht jemand einen Tipp wie ich dieses Problem lösen kann bzw. Alternativvorschläge?

Beste Grüße und vielen Dank im Voraus
Lamont
Zuletzt geändert von Lamont am 30.11.2009 17:13:11, insgesamt 1-mal geändert.

rhHeini
Beiträge: 2289
Registriert: 20.04.2006 20:44:10

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von rhHeini » 19.11.2009 21:48:43

Lamont hat geschrieben:Ich denke, das Problem ist bei mir, dass md1 verschlüsselt ist. Also LVM auf einem verschlüsselten Volumen läuft.
Die Abfrage der Passphrase kommt somit vor der Abarbeitung von fstab wo die Volumes (inkl. USB-Stick mit Key) eingehängt werden. So erkläre ich es mir jedenfalls.
Was ist denn genau Dein Problem, wo bleibt der Rechner hängen, welche Fehlermeldungen kommen wann?

Welche Anleitung hast Du für die Einrichtung des USB-Sticks verwendet (bitte Link)? Ich hab mich auch mit zwei Anleitungen rumgeschlagen, die letztendlich beide fehlerhaft waren.

Ich denke wir werden das schon hinbiegen. Läuft der Rechner mit Passphrase hoch? Wäre die erste Voraussetzung.

Mfg rh

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 19.11.2009 22:18:46

Hi rh,

soweit klappt alles bestens. Ich gebe die Passphrase manuell ein und Debian startet.

Die Anleitung für das Aufsetzen des Servers habe ich von hier:
http://www.kaaden.franken.de/output/how ... index.html

Die USB-Stick Geschichte von hier:
http://www.andreas-janssen.de/cryptodisk.html#a2

Fehlermeldungen kommen gar keine, da der USB-Stick gar nicht erkannt wird.

Habe noch ein wenig recherchiert und es lag wohl (wie sollte es auch anders sein ;-) ) an mir. Ich bin nach der Anleitung „Datei statt Passwort als Schlüssel“ auf der andreas-janssen Seite gegangen. Ich hätte aber wohl folgende von seiner Seite nehmen müssen: „root-Partition mit Schlüssel auf USB-Stick“.

Zusätzlich habe ich hier noch einen Forumseintrag zu der Seite von Andreas Janssen gefunden:
http://www.linuxforen.de/forums/showthr ... a&t=254981

Da ich bis auf die Boot-Partition alles verschlüsselt habe, könnte es evtl. so klappen. Schaffe das aber nicht mehr noch heute zu testen.

Beste Grüße
Lamont

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 20.11.2009 15:33:46

So, habe jetzt den Punkt „root-Partition mit Schlüssel auf USB-Stick“ von folgender Seite versucht: http://www.andreas-janssen.de/cryptodisk.html#a2
Leider passiert bei mir gar nichts wenn ich den Rechner neu starte. Ich werde wieder ganz normal nach der Passphrase gefragt und muss diese manuell eingeben.

Ich bin wie folgt vorgegangen:
- Habe das Skript mit kleinen Änderungen übernommen und unter dem unverschlüsselten /boot Verzeichnis abgelegt und auch ausführbar gemacht. Meine Änderungen bezogen sich auf den mount-Befehl und die Fehlermeldungsunterdrückung sowie die Nutzung von LABEL. Habe das Skript auch getestet und es funktioniert soweit. Allerdings werden mir noch die Meldungen des erfolgreichen Einhängens des USB-Sticks angezeigt. Bekomme ich die irgendwie weg?
- Die initrd habe ich nicht geändert, da ich den Stick mit ext3 formatiert habe und ich davon ausgehe, dass die nötigen Treiber vorhanden sind.
- Dann habe ich die /etc/crypttab angepasst und hinter luks ,keyscript=“auszuführende Datei“ eingetragen
- Auf dem USB-Stick befinden sich die Passphrase

Liegt es evtl. doch daran, dass main RAID (md1) verschlüsselt ist und die Abfrage der Passphrase vor dem Einhängen der LVM-Partitionen geschieht?

Beste Grüße
Lamont

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von jeff84 » 20.11.2009 15:40:44

Du musst die initrd allerdings schon ändern.
Solange alles verschlüsselt ist, läuft nur das System in der initrd. Also muss auch hier in der crypttab und der fstab stehen, was Sache ist, sonst klappt nichts. Wie soll denn beim boot von der verschlüsselten Platte gelesen werden, wie man die Platte entschlüsselt???

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 20.11.2009 16:58:07

Hi Jeff,

verstehe deinen Beitrag nicht so ganz. Was haben crypttab, fstab und initrd in diesem Fall miteinander zu tun? Was muss in der fstab und crypttab stehen?

Beste Grüße
Lamont

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von jeff84 » 20.11.2009 18:50:16

Das hat damit zu tun, dass die initrd ein kleines Linux-System meist mit busybox, vielleicht noch modprobe und cryptsetup ist, das vom Kernel geladen wird. Entsprechend gibt es hier auch Konfigurationsdateien, wie zum Beispiel die fstab... Ich denke die crypttab wird auch darin aufgenommen werden.
Es ist ja unmöglich vor der Entschlüsselung Dateien von der verschlüsselten Partition zu lesen. Daher liegt die initrd in der nicht verschlüsselten Boot-Partition und lädt das Mini-System ins Ram, in dem dann das Nachladen verschiedener Module und auch das Entschlüsseln der Festplatte angeordnet wird. Erst dann kann in dein normales System gebootet werden...

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 20.11.2009 20:28:41

Hi Jeff,

alles klar, jetzt macht's langsam klick.
Änderungen an der crypttab, fstab etc. müssen über eine Neuerstellung der initrd an selbe weitergegeben werden. Jedenfalls wenn es sich um die verschlüsselte root-Partition handelt.

Aus Neugier: woher weiß initrd, welche Konfigurationsdateien mit einbezogen werden müssen?

Werde wohl erst am Sonntag dazu kommen, das zu testen.


Beste Grüße & vielen Dank
Lamont

rhHeini
Beiträge: 2289
Registriert: 20.04.2006 20:44:10

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von rhHeini » 20.11.2009 21:59:50

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:

Code: Alles auswählen

# cd /media
# mkdir usb0
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:

Code: Alles auswählen

# cd /etc/initramfs-tools
# nano modules
Einfügen:

Code: Alles auswählen

nls_base
nls_utf8
nls_cp437
nls_iso8859_1
vfat
fat
Als vorletztes muss nun die crypttab angepasst werden. Im root-Terminal ausführen:

Code: Alles auswählen

# cd /etc
# nano crypttab
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

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 28.11.2009 17:38:51

Hallo rh,

vielen Dank für diese ausführliche Anweisung. Damit hatte ich gar nicht gerechnet. :)
Bin erst heute zum testen gekommen. Leider bekomme ich beim booten mit usb-stick folgende Fehlermeldung: mounting LABEL=USBKEY on /tmpusb failed: No such device.
Hatte das Skript usbload.sh mit sh -x getestet und es funktionierte. Hatte die LABEL-Funktion für den USB-Stick genutzt, damit es nicht zu Verwechslungen kommt.

Irgendwelche Tipps?

Beste Grüße
Lamont

rhHeini
Beiträge: 2289
Registriert: 20.04.2006 20:44:10

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von rhHeini » 29.11.2009 14:35:31

Da tippe ich erst mal auf Syntaxfehler. So sollte es aussehen:

Code: Alles auswählen

/dev/disk/by-label/boot
Ist der Anfang einer Zeile aus der fstab meines Servers. Ersetze /boot durch das Label Deines Sticks. Aber Achtung: Gross/Kleinschreibung spielt eine Rolle.

Wenn es absolut nicht klappen will: geht erst mal stur nach Kochrezept vor, und erst wenn das läuft, im zweiten Schritt abwandeln. Ich habe z.B. alles auf Label und uuid umgestellt, aber erst als ich die Bugs aus den Anleitungen raus hatte.

Mfg rh

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 29.11.2009 18:35:38

Der Fehler lag wie immer im Detail. Jedenfalls klappt es jetzt auf meinem Testsystem (ohne RAID). Ich hatte unter modules "usb-storage" und nicht "usb_storage" eingegeben. Deshalb hat die Kiste beim hochfahren wohl auch nicht den USB-Stick erkannt.

Eine Frage noch. Folgendes habe ich nicht verstanden, bzw. funktioniert nicht bei mir: wie kann ich die initrd, die ich als Kopie angelegt habe, wieder starten? Ich habe es so wie in der Anleitung von http://wejn.org/how-to-make-passwordles ... f32dbc6d7a gemacht. Habe in der menu.lst title, root, kernel und inritrd hinter die Zeile "END DEBIAN AUTOMAGIC KERNELS LIST" kopiert und den Namen der inritrd angepasst. Danach ein Grub-Update ausgeführt.
Wenn ich den Rechner neu starte, erscheint dann zwar eine neue Auswahl, aber beim Auswählen kommt es zur Fehlermeldung.

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 29.11.2009 20:24:57

So, habe jetzt meinen Heimserver noch einmal voller Tatendrang neu aufgesetzt und wie es nicht anders zu erwarten war, wird wieder gemeckert. Der USB-Stick wird anscheinend nicht erkannt:
cryptsetup: cryptsetup failed, bad password or options?
Mount: mounting /dev/sdd on /tmpusb failed: No such file or Directory
….

Nach einer Weile lande ich dann hier:
(initramfs)

Unter /dev finde ich keinen USB-Stick (sdd), die anderen HDs und md0, md1 sind vorhanden.
/tmpusb ist auch vorhanden
Und das Skript usbload.sh liegt unter /keyscripts

Wie gesagt, ohne RAID1 hat es bei mir funktioniert und mit RAID1 geht es nicht. Hat evtl. jemand eine Erklärung und am besten noch eine Lösung ;-) dafür?

Beste Grüße
Lamont

rhHeini
Beiträge: 2289
Registriert: 20.04.2006 20:44:10

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von rhHeini » 29.11.2009 22:05:11

Könnte sein das der Stick beim Booten eben nicht sdd ist, grub und die initrd haben mir da schon manchen Streich gespielt. Schau Dir genau die Bootmeldungen an, notfalls schmeiss mal die quiet-Option aus der menu.lst raus (ne Knoppix-DVD hilft bei sowas). Was der Stick ist sollte man an der Grösse erkennen.

Vielleicht liegt es auch dadran dass die Partition auf Deinem Stick sdd1 ist?

Was das Starten der Kopie der initrd angeht: das muss vor der "End Debian..." stehen. Grub-update brauchst Du nicht.

Mfg rh

Lamont
Beiträge: 50
Registriert: 16.11.2009 15:23:35

Re: USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von Lamont » 30.11.2009 17:10:42

So, da Unmögliche ist geschehen: die Kiste läuft! :D
Ich hatte noch ein wenig im Internet geforscht und es lag an einem fehlenden Modul in /etc/initramfs-tools/modules
Zuerst hatte ich folgende Module hinzugefügt:
usbcore, uhci_hcd, ohci_hcd, ehci_hcd
Als es dann endlich lief, habe ich ein wenig ausprobiert und ohci_hcd blieb übrig. Außerdem hatte ich usb-storage wieder mit Binde- und nicht Unterstrich geschrieben. Im Netz gibt es da ja alle möglichen Schreibweisen. modprobe –l usb* hat dann Licht ins Dunkel gebracht.

Dann hatte ich das Skript noch auf LABEL=“USB-NAME“ umgestellt, was nicht funktioniert hat.
Die Variante dev/disk/by-label/"USB-NAME" ging dann aber.

Noch einmal einen herzlichen Dank an rhHeini! :)

Beste Grüße
Lamont

ManuP
Beiträge: 71
Registriert: 08.01.2007 01:06:06

Re: [erl] USB-Stick als Schlüssel für Festplattenverschlüsselung

Beitrag von ManuP » 15.12.2009 12:29:35

Herzlichen Dank an rhHeini für diese super Anleitung und die hilfreichen Kommentare/Zusammenfassungen von Lamont. Root-Partition verschlüsseln hat nun auch bei mir geklappt. Ich finde es allerdings doof, dass der USB-Stick in einem sehr kleinen Zeitlichen Fenster in den PC gesteckt werden muss. Ist es möglich, einzustellen, dass zB alle 30 Sekunden geschaut wird, ob nun ein USB-Stick in den Rechner gesteckt wurde?

Wenn der PC gebootet hat, und an GRUB vorbei ist, dann sucht er drei oder vier mal nach dem Stick, wenn er nicht gefunden wurde, muss man das System neu starten. Das ist störend.

Gruß,
Manu

Antworten