SSH im Initramfs

Festplattenvollverschlüsselung ist eine gute Idee, wäre da nur nicht die nervige Passwortabfrage beim Booten. Was beim Laptop oder Desktop den Bootvorgang lediglich ein bisschen verzögert, wird bei Maschinen, die nicht über Bildschirm/Tastatur verfügen, oder bei denen diese nicht erreichbar sind (beispielsweise weil das Gerät irgendwo weit weg steht und nur über das Internet erreichbar ist), zum echten Problem. Und obgleich man einen Server idealerweise ohnehin nicht herunterfährt: Auch hier gibt es hin und wieder Kernel-Updates, die einen Reboot erforderlich machen. Ist dann das Eingeben des Passworts nur kompliziert, gehört man zu den Glücklichen. Ist es unmöglich, ist das ziemlich unglücklich.

Abhilfe schafft es, einen SSH-Server in's Initramfs zu installieren. Unter Debian kommt dazu der minimalistische SSH-Server "Dropbear" zum Einsatz. Da der Kernel und das Initramfs ohnehin unverschlüsselt irgendwo liegen müssen, kann dann der SSH-Server automatisch starten und einen Zugang zur Passworteingabe bieten. Unter Debian ist die Installation denkbar einfach:

apt-get install openssh-server dropbear busybox

Anschließend muss man noch die SSH-Schlüssel kopieren, mit denen man dann später passwortlosen root-Zugang hat:

scp root@[Server-IP/-Hostname]:/etc/initramfs-tools/root/.ssh/id_rsa id_rsa.initramfs

Die Schlüsseldatei sollte man sehr gut aufheben, denn sie wird einerseits benötigt, um das Passwort aus der Ferne einzugeben, und andererseits erlaubt sie eben diesen Zugriff auf die Maschine; es wäre also sehr ungünstig, wenn der Schlüssel einem Dritten in die Hände fallen würde. Hier wird angenommen, dass der Rechner seine IP-Adresse automatisch über DHCP aus dem Netzwerk bezieht. Ist dies nicht der Fall, ist zusätzlich eine händische Konfiguration notwendig, siehe dazu den untenstehenden Link.

Jetzt den Server neustarten und schon kann man sich via SSH einloggen. Zumindest, wenn man die IP-Adresse des Hosts weiß. Leider kann sich die Adressverteilung via DHCP im lokalen Netz immer mal wieder verändern, sodass Maschinen regelmäßig neue Adressen zugewiesen bekommen. Mit folgendem Snippet kann man sich in einem herkömmlichen Heimnetz mit IP-Adressen im Bereich 192.168.178.0/24 die IP-Adressen anzeigen, die auf Pings reagieren:

nmap -sP 192.168.178.0/24 | grep 192.168.178

Mit ein bisschen Knobeln und Ausprobieren sollte man den Rechner schnell finden, sodass man sich mit dem folgenden Befehl einloggen kann:

ssh -o "UserKnownHostsFile=known_hosts.initramfs" -i "id_rsa.initramfs" root@[Server-IP/-Hostname]

Dabei wird der Fingerprint des Dropbear SSH Servers in der Datei "known_hosts.initramfs" abgelegt und der SSH-Schlüssel für den Login aus der Datei "id_rsa.initramfs" geladen, die man sich zuvor von dem entsprechenden Rechner kopiert hat.

Nun nurnoch das Passwort eingeben und damit die Festplatten entsperren:

echo -ne '[Passwort]' > /lib/cryptsetup/passfifo; exit

Hier wird davon ausgegangen, dass beim Booten nur nach einem Passwort gefragt wird. Die übrigen Schlüssel für die Festplattenverschlüsselung könnte man in der einen Partition, deren Passwort zu Beginn abgefragt wird, hinterlegen. Möglicherweise kann man die übrigen Passwörter auch noch im weiteren Verlauf des Bootprozesses auf die gleiche Art und Weise eingeben.

Als wichtig hat sich erwiesen, nach dem Eingeben des Passworts den SSH-Server auf direktem Wege mit "exit" zu verlassen. Andernfalls lässt sich das Initramfs nicht aushängen und der Boot-Vorgang kann in's Schlingern kommen. Die Maschine sollte nach erfolgreicher Passwort-Eingabe den Boot-Vorgang fortsetzen. Dropbear wird dazu heruntergefahren und nach einer kurzen Zeit sollte sich der Standard-OpenSSH-Server auf dem gleichen Port wieder melden. Das System kann nun wie gewohnt verwendet werden.

(basierend auf: http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/)

Tags: Linux