Dieses Bootscript kümmert sich um das Mappen verschlüsselter Partitionen oder Container-Dateien auf entschlüsselte virtuelle Geräte (Crypto-Devices) unter /dev/mapper/*. Hierfür wird das dm_crypt Kernelmodul eingesetzt. Das Skript basiert auf SuSE's boot.crypto-Skript und wurde um einige Funktionen erweitert.
Das Skript ist im Archiv Update: boot.cryptmap.0.6.1.tar.gz enthalten und bietet gegenüber boot.crypto aus SuSE10 folgende Vorteile und Erweiterungen:
Das Skript kann in den Bootprozess integriert werden, indem es in das Verzeichnis /etc/init.d kopiert wird. Um zu funktionieren, müssen lediglich zwei kleine Anpassungen an dem Skript, welches die lokalen Dateisysteme mountet, vorgenommen werden (s. u.). Das im Archiv enthaltene Shell-Script „install.sh“ kann diese (und alle anderen) Installationsschritte automatisch durchführen.
Da es sich um ein Bootscript handelt, wird es normalerweise nicht direkt durch den Benutzer gestartet, sondern es wird aufgerufen, wenn das System hoch- oder herunterfährt. Die Installation wird im Abschnitt „Installation“ erklärt. Aber natürlich kann man das Skript auch direkt aufrufen. Falls es sich im Verzeichnis /etc/init.d befindet, würde das ungefähr so aussehen:
user@home:> /etc/init.d/boot.cryptmap <argument>
Folgende Werte für <argument> sind zulässig:
Auf meiner SuSE-Installation sieht die Reihenfolge, in der die Skripte beim Hoch- und Herunterfahren aufgerufen werden folgendermaßen aus:
boot:
shutdown:
Für diejenigen, die sich nicht den Strapazen einer manuellen Installation unterziehen wollen, gibt es das Skript „install.sh“, welches die im Folgenden beschriebenen Schritte automatisch durchführt und (falls etwas schief geht) Fehlermeldungen liefert. Für alle „Fußgänger“ hier die Installationsschritte:
Kopiere die Datei „boot.cryptmap“ in das Verzeichnis /etc/init.d sowie die Datei „crypttab“ in das Verzeichnis /etc. Bei der Datei boot.cryptmap muss die Berechtigung zum Ausführen („x“) gesetzt sein. Vergiss nicht, Sicherheitskopien von allen Dateien anzufertigen, die Du überschreibst oder veränderst!
boot.cryptmap muss beim Systemstart aufgerufen werden, bevor die lokalen Dateisysteme gemountet werden, damit dabei auch verschlüsselte Dateisysteme in /etc/fstab berücksichtigt werden können.
Auf meinem System (SuSE10) wird das Mounten der lokalen Dateisystem vom Skript boot.localfs erledigt. Die Reihenfolge, in der die Skripte ausgeführt werden, wird dabei von Kommentarzeilen am Anfang der Skripte (vergl. „man insserv“) festgelegt. Es muss im Skript boot.localfs die Zeile, welche mit
# Required-Start: [... irgendwas...]
beginnt, der Text „boot.cryptmap“ am Ende eingefügt werden. Auf meinem System sieht diese Zeile nun folgendermaßen aus:
# Required-Start: boot.rootfsck boot.cryptmap
Dadurch wird insserv darüber informiert, dass das Skript boot.cryptmap unbedingt vor dem Skript boot.localfs ausgeführt werden muss.
Die zweite Anpassung betrifft den Umstand, dass das Skript boot.localfs (anders als beim Hochfahren) beim Herunterfahren alle lokal gemounteten Dateisysteme, inklusive dem Root-Dateisystem, unmountet. Das ist insofern problematisch, dass das so lange nicht möglich ist, wie noch lokale Dateien als Loop-Devices eingerichtet sind.
Deshalb muss boot.cryptmap mit dem Argument „pre_stop“ aufgerufen werden, bevor boot.localfs die Dateisysteme unmountet. Das ist gar nicht so schwer:
Finde die Zeile, die mit
stop)
beginnt und füge die Zeile
/etc/init.d/boot.cryptmap pre_stop #modifiziert für boot.cryptmap
direkt als nächste Zeile dahinter ein.
Da das Skript Benutzereingaben (Passwörter) abfragt, muss es als interaktiv markiert werden, weil das System beim Hochfahren sonst einfach stehenbleibt. (Den Grund DAFÜR herauszufinden war gar nicht so einfach;)) Interaktive Boot-Skripte werden in der Konfigurationsdatei /etc/insserv.conf angemeldet. Suche hier nach der Zeile, die mit
<interactive> [… irgendwas …]
beginnt und füge den Text „boot.cryptmap“ dahinter ein. Bei mir sieht diese Zeile nun so aus:
<interactive> boot.crypto boot.localfs boot.rootfsck apache2 boot.cryptmap
Nachdem sich alle Dateien an ihrem Platz befinden und alle Modifikationen durchgeführt wurden, müssen im Verzeichnis /etc/init.d/boot.d zwei symbolische Links auf boot.cryptmap gesetzt werden. Durch die Namen der Links wird die Position festgelegt, in der sie beim Starten/Herunterfahren aufgerufen werden. Zum Glück muss hier nicht tief ins Detail gegangen werden, denn das Programm „insserv“ erledigt das ganz automatisch. Führe einfach folgendes Kommando aus:
user@host:> insserv boot.cryptmap
Wenn das funktioniert hat, befinden sich nun zwei neue Links im Verzeichnis /etc/init.d/boot.d. Mit folgendem Befehl kannst Du das überprüfen:
user@host:> ls -la /etc/init.d/boot.d/[KS][0-9][0-9]boot.cryptmap lrwxrwxrwx 1 root root 16 2006-02-19 12:03 /etc/init.d/boot.d/K17boot.cryptmap -> ../boot.cryptmap lrwxrwxrwx 1 root root 16 2006-02-19 12:03 /etc/init.d/boot.d/S07boot.cryptmap -> ../boot.cryptmap
Sooo… das wars auch schon!
Falls Du bereits verschlüsselte Dateisysteme mit dm_crypt erzeugt hast, kannst Du nun die Datei „/etc/crypttab“ anpassen, um diese beim Hochfahren automatisch einzubinden. Der Aufbau dieser Datei orientiert sich stark an dem anderer Konfigurationsdateien wie z. B. fstab oder auch cryptotab. In jeder Zeile wird genau ein Mapping definiert, Kommentarzeilen beginnen mit „#“. Es sind sechs Parameter notwendig, die durch Leerzeichen oder Tabstopps zu trennen sind:
Ausführlichere Informationen zu den einzelnen Parametern und einige Beispiele finden sich in der mitgelieferten Datei /etc/crypttab.
Sehr viele Infos und Anleitungen zum Thema Verschlüsselung mit dm_crypt befinden sich im dm_crypt-Wiki unter http://www.saout.de/tikiwiki.
Über Kommentare/Anmerkungen/Hinweise würde ich mich freuen!