Schlüssel auf USB-Stick für verschlüsselte Root-Partition

In diesem Artikel möchte ich mal ein kleines How-To schreiben wie ich meine Festplatte über einen Schlüssel auf einem USB-Key während des Bootens entschlüssele. Den Schlüssel für die verschlüsselte Festplatte auf einem USB-Key zu haben hat natürlich Vor- und Nachteile. Natürlich ist es eine Gefährdung für die Sicherheit, da jeder, der an den Stick drankommt auch an den Schlüssel kommt. Wenn man es schafft diese Gefahr zu reduzieren, bietet der Schlüssel einige Vorteile in der Bequemlichkeit. Man muss kein Passwort eintippen und die Festplatte wird “automatisch” entsperrt. Außerdem kommt man über einen Hardware-Keylogger nicht an das Passwort heran (jedoch ist das eher theoretischer Natur).

Ich setze nun folgendes Voraus: Es ist bereits eine verschlüsselte Partition über Cryptsetup angelegt und einer der Keyslots ist mit einem in einer Datei gespeicherten Schlüssel gefüllt. Außerdem ist der Boot-Vorgang so eingerichtet, dass von einer verschlüsselten Root-Partition gestartet wird.

Nun sollte man als erstes den USB-Stick als ext2 formatieren. Das hat zwei Vorteile: 1. man braucht keine Treiber für fat in die initrd integrieren. 2. sollte jemand mal aus Versehen an den Stick kommen, funktioniert er nicht unter Windows 😉
An der Stelle könnte man sich auch gleich die UUID des USB-Keys ausgeben lassen.

So nun kommen wir zum Kernstück des ganzen Vorhabens. Wir schreiben ein Skript welches das Passwort aus einer Datei auf dem USB-Stick liest und Cryptsetup zuführt. Cryptsetup unterstützt einen solchen Mode: es kann ein Skript angegeben werden, welches das Passwort zufüttert. Dabei ist es wichtig, dass JEDE Ausgabe des Skripts an Cryptsetup weitergegeben wird. Deshalb muss man alle Ausgaben auf stderr umleiten.
Mein Skript:

#!/bin/sh
modprobe usb-storage 1>&2
sleep 5
mkdir /usb 1>2&
mount -t ext2 /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /usb 1>2&
sleep 5
cat /usb/root.key
umount /usb 1>2&

Wir sehen, dass Skript lädt als erstes das Treiber-Modul für USB-Sticks. Danach geben wir über den sleep dem System Zeit den Stick zu erkennen. Nun erzeugen wir den Mountpoint und binden den Stick ein. Erneut geben wir dem System etwas Zeit (hier kann man natürlich etwas herumspielen und die Zeit verkürzen). Nun geben wir einfach den Inhalt des gespeicherten Schlüssels aus und unmounten den Stick wieder. Beim Starten wird uns das ganze dann durch eine Success-Meldung angezeigt. An dieser Stelle kann man den Stick auch ohne Probleme wieder abziehen.

Nun müssen wir noch dem Cryptsetup mitteilen, dass wir ein Skript verwenden wollen. Dazu bearbeiten wir /etc/crypttab:

# target name|source device|key file|options
root /dev/vg1/vol1 none luks,retry=1,cipher=aes-cbc-essiv:sha256,keyscript=/path/to/keyscript

Wir sehen, dass entscheidende ist, dass bei “key file” “none” angegeben ist und bei den Optionen ein “keyscript=/path/to/keyscript” hinzukommt. Wenn man nun eine neue initrd erstellt, wird das Skript mit eingearbeitet.

Nun fehlt noch eins: die initrd braucht auch sämtliche Module um den USB-Stick überhaupt einbinden zu können. Sonst hat man ein Henne-Ei Problem. Der Treiber für den USB-Stick liegt im verschlüsselten System und um das System zu entschlüsseln, braucht man den Treiber. Dazu bearbeitet man die Datei /etc/initramfs-tools/modules. Hier müssen alle Module aufgelistet werden, die man braucht um den USB-Stick einzubinden. Da ich jetzt nicht genau weiß, welche es zwingen sind, gib ich mal meine komplette Datei an:

aes-x86_64
dm-crypt
dm-mod
sha256
sd_mod
usb_storage
usb-storage
ehci_hcd
ohci_hcd

Wenn ich jetzt nichts wichtiges vergessen habe, sollte man nun die initrd neue erzeugen können. Dies macht man über:
update-initramfs -u
Wichtig: erst mal nur die initrd für den aktuellen Kernel bearbeiten. Falls etwas nicht klappt, möchte man ja zumindest noch mit einem alten Kernel ein startfähiges System haben 😉

Nun ist der Zeitpunkt das ganze auszuprobieren. Reboot 🙂

Martin ist zu dumm…

… auf Worpress 2.5 upzugraden 🙁
Ich hab wp-content anstatt vom backup ins neue WordPress, vom neuen ins backup kopiert. Daher fehlen nun einige Bilder, etc. Ich hoffe noch ein altes Backup zu finden und werde in Zukunft auch das WordPress Verzeichnis in mein Backup Skript miteinschließen 😉

Also hier läuft jetzt auch WordPress 2.5. Fehler, die sich nicht aus obigem erklären, bitte melden.

Was passiert…

… wenn man Student bei Google Summer of Code ist?

Das Postfach explodiert 😉
Mailaufkommen
Ich hab nicht schlecht gestaunt, als ich heute morgen 300 ungelesene und unsortierte Mails in meinem Postfach entdeckt hatte. Es existiert eine Mailinglist, in der sich jeder Student vorstellen soll. Tja auf Grund von Zeitverschiebung konnte ich das nicht rechtzeitig reduzieren. Ich erwarte nun noch weitere 400 Mails.

Updates on CoverSwitch

Es ist etwas Zeit vergangen seit meinem letzten Post – hatte einfach nichts zum Berichten.
Nun ich war diese Woche endlich wieder fleißig und habe die Probleme mit TwinView in meinem CoverSwitch Effekt behoben. Also auch die Nutzer von zwei Monitoren können nun endlich in den Genuss kommen 😉
In der Zwischenzeit hat auch der Präsident der KDE e.V. einen Blick auf meinen Effekt geworfen und gleich an der Stelle verbessert wo ich per Definition versage: Design. Er hat die Farbwahl bei der Spiegelung etwas verändert und das sieht wirklich gut aus 😉 Seht selbst:
CoverSwitch

Ach für alle Freunde von Eye-Candy: der Wobbly-Windows-Effekt wurde heute in das KDE Repository hochgeladen. Habe es vorhin ausprobiert und der Effekt ist echt sehr gelungen – ich merke keinen Unterschied zu Compiz 😉

Was ist so besonders an diesem Post?

Der Eintrag ist in einem WebKit Browser geschrieben.
Ich habe dieses Wochenende mal die KDE 4.1 pre pre alpha (oder wie man so was nennt) gebaut und bin gerade in einer KDE 4.1 Session. Als kleine Zugabe hab ich auch mal den WebKit Part für Konqueror gebaut und ja er funktioniert 😉 Ein langer Wunsch geht in Erfüllung: WebKit Browser.

KDE 4.1 macht jetzt einen sehr guten Eindruck. Klar es ist noch eine Alpha und an ein paar Stellen harkts (Systray wird nicht neu gezeichnet), aber ich glaube ich werde es nun produktiv einsetzen. Das liegt aber eher daran, dass ich zum Bauen von KDE 4.1 Qt 4.4 benötige und das macht Plasma aus KDE 4.0 fast unbenutzbar.

Ich hab jetzt auch Amarok und Kontact in der KDE 4 Variante 😉

ISO nur noch eine Lachnummer

Es war ja fast zu erwarten: Office Open XML ist nun der ISO Standard 29500. Für mich ist die ISO jetzt nur noch eine Lachnummer. Bei den ganzen Unregelmäßigkeiten ist die ISO also eine Organisation, die sich mit genügend Geld einfach kaufen lässt? Das ist einfach nur traurig.
Gut, dass wir in der Informatik eigentlich keine ISO brauchen. Der einzige wirklich wichtige Standard der ISO, OSI, war schon längst überholt und durch TCP/IP ersetzt, als er rauskam. Wir haben unsere eigenen Organisationen, sei es die IETF mit ihren RFCs oder das W3C, das uns XML gab. Die Standards sind zwar nicht “offiziell”, aber sie funktionieren und im Allgemeinen wird sich auch an sie gehalten, bzw. die Marktmacht zwingt die Konkurrenz die Standards korrekt zu implementieren.
Auch interessant ist, dass bei dem “Chaos” der RFCs eine funktionierende Referenzimplementierung Pflicht ist. Anscheinend braucht man das bei der ISO nicht. Der 6000 Seiten Müll kann ja nicht mal von MS selbst implementiert werden.
Schön jetzt gibt es einen neuen ISO Standard und es wird sich wohl kaum einer daran halten. Denn wer kann das Implementieren? Unter der Annahme, dass eine Person pro Tag 1 Seite implementieren kann (und das wäre sicherlich viel), bräuchte man ganze 16 Jahre. Auf ein Team von 10 Personen also immer noch mehr als 3 Jahre. Wer soll das bitte bezahlen?