Verschlüsseltes System via SSH freischalten
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Hinweis:
Falls man die Installation nicht richtig durchführt oder sich den falschen Schlüssel kopiert, ist es möglich, dass das System nicht mehr booten kann bzw. eine manuelle, lokale Eingabe des Schlüssels am Rechner notwendig ist.
Dieser Artikel erklärt, wie man ein System mit verschlüsselter Root-Partition auch ohne physikalischen Zugang zum Rechner über SSH freischalten kann. Verwendet wird hierzu der dropbear-SSH-Server, der im initramfs untergebracht wird. Dieses Vorgehen kann man anwenden, wenn man z.B. „Dedicated Server“ fast komplett (in diesem Fall bis auf die /boot-Partition) verschlüsseln möchte. Dies ist z.B. bei der Nutzung von Servern vorteilhaft, an denen man nicht direkt arbeitet, und nur über das Netzwerk (komfortabel) erreichen kann.
Installation¶
Folgende Pakete müssen installiert[1] werden:
cryptsetup (sollte schon vorhanden sein)
dropbear (universe)
dropbear-initramfs (universe)
dropbear-run (universe)
dropbear-bin (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install cryptsetup dropbear dropbear-initramfs dropbear-run dropbear-bin
Oder mit apturl installieren, Link: apt://cryptsetup,dropbear,dropbear-initramfs,dropbear-run,dropbear-bin
Wenn bereits ein anderer SSH-Server installiert ist, wird dies erkannt und dropbear wird nur während des Bootvorgangs gestartet. Zur späteren Verifikation sollte man sich die Fingerprints, die ausgegeben werden, aufschreiben.
Konfiguration¶
Nach jeder Änderung müssen die Dateien für initramfs neu erstellt werden. Dies kann durch folgenden dpkg-Befehl für Dropbear erledigt werden (die Installationsskripte des Paketes rufen update-initramfs auf).
sudo dpkg-reconfigure dropbear-initramfs
sudo update-initramfs -u
Schlüssel erstellen¶
Ein Remotezugriff via dropbear funktioniert nur mit einer zusätzlichen Schlüssel authentifizierten Anmeldung. Hierzu muss ein Schlüsselpaar für den Host als auch den Client vorhanden sein. Ein passendes Schlüsselpaar kann mit dem SSH-Keygen Befehl erzeugt werden:
ssh-keygen -t rsa -b 4096
Der Verschlüsselungs-Algorithmus wird mit der Option -t rsa
für eine RSA-Verschlüsselung und die Schlüsselgröße mit der Option -b 4096
ausgewählt. Somit wird ein RSA-Schlüsselpaar mit 4096 Bit erstellt. Damit alles klappt, wird sowohl am Server als auch am Client ein RSA-Schlüssel erzeugt.
Der private Schlüssel sollte niemals weitergegeben und entsprechend sicher verwahrt werden.
Erstanmeldung und Schlüssel an Server übertragen¶
Damit bei der Verbindung deren Authentizität überprüft werden kann, benötigt der Server entsprechend den Public-Key des Clients. Für die Übertragung des öffentlichen Schlüssel vom Client auf den Server eignet sich der Befehl ssh-copy-id
.
ssh-copy-id -i .ssh/key_rsa.pub benutzer@server-ip
Der Benutzer
sowie die Server-IP
sind entsprechend der eigenen Konfiguaration anzupassen.
Nach der Bestätigung mit ⏎ wird das SSH-Passwort des Servers angefordert:
benutzer@server-ip's password:
Nach der Eingabe des korrekten Passwortes erscheint:
# Now try logging into the machine, with "ssh 'benutzer@server-ip'", and check in: # ~/.ssh/authorized_keys # to make sure we haven't added extra keys that you weren't expecting.
Was ist passiert? Der obige Befehlt ssh-copy-id
sorgte für eine Anmeldung am Server und hat gleichzeitig den SSH-Key vom Client an diesen übermittelt und in der Datei ~/.ssh/authorized_keys
auf dem Server gespeichert. Ab sofort ist eine Anmeldung beim Server von diesem Client aus mit dem SSH-Key möglich:
ssh benutzer@server.ip
Bei der Anmeldung wird nicht mehr das SSH-Passwort des Servers sondern die Passphrase des eigenen SSH-Schlüssel abgefragt.
Dieser Schritt muss auf jedem Client, welcher später auch via dropbear die verschlüsselte Festplatte via SSH entsperren soll vorab durchgeführt werden!
Schlüssel für dropbear kopieren¶
Durch den vorherigen Schritt wurde der öffentliche Key des Client auf dem Server unter ~/.ssh/authorized_keys
gespeichert. Damit auch dropbear diese Schlüssel verwenden kann, müssen diese noch in das Verzeichnis von dropbear kopiert werden. Bei einer Neukonfiguartion wird die Datei /etc/dropbear/initramfs/authorized_keys
noch nicht vorhanden sein. Somit kann diese direkt kopiert werden:
sudo cp ~/.ssh/authorized_keys /etc/dropbear/initramfs/authorized_keys
Aus Sicherheitsgründen sollte diese Datei root
gehören und von anderen nicht beschreibbar sein.
Jetzt erschließt sich, warum sich vorher alle benötigten Clients via ssh-copy-id
am Server anmelden mussten. Es sollte auch überprüft werden, dass nur die berechtigten SSH-Keys in der Datei authorized_keys
gespeichert sind.
Netzwerk-Konfiguration im initramfs¶
Die Netzwerk-Konfiguration für den Remote-Zugriff auf den Server wird in der Datei /etc/initramfs-tools/initramfs.conf durchgeführt.
Wie die genauen Regeln zur Konfiguration des Netzwerks aussehen, kann unter nfsroot.txt 🇬🇧 nachgelesen werden. Für DHCPv4 muss keine Zeile hinzugefügt bzw. geändert werden.
# # DEVICE: ... # # Specify the network interface, like eth0 # DEVICE=
Für eine statische IPv4-Adresse muss die Zeile wie folgt geändert werden (es werden nur IPv4, Gateway, Netzmaske und Gerät festgelegt):
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip> IP=192.168.56.101::192.168.56.1:255.255.255.0::ens192
Nun wird das Netzwerk-Device bereits vor der Abfrage des Passworts konfiguriert.
Port ändern¶
Möchte man den Port ändern auf dem Dropbear lauscht oder weitere Konfigurationen während des Bootvorgangs vornehmen muss man folgende Zeile in /etc/dropbear/initramfs/dropbear.conf ergänzen:
DROPBEAR_OPTIONS="-p 2222"
Konfiguaration abschließen¶
Nachdem nun alle Schlüssel erstellt, getauscht und kopiert wurden und bei Bedarf Änderungen an der Konfiguaration vorgenommen wurden, muss dropbear
und initramfs
aktualisiert werden:
sudo dpkg-reconfigure dropbear-initramfs
sudo update-initramfs -u
Wenn alles ohne Fehler verarbeitet wurde ist es an der Zeit für den Bootvorgang.
Bootvorgang¶
Ist das System im initramfs, erscheint auf dem Monitor wie gewohnt die Kennwortabfrage. Ebenso wird ausgegeben (wenn ein Monitor angeschlossen ist), auf welcher Adresse dropbear lauscht. Dropbear bekommt bei DHCP-Konfiguarationen häufig eine andere IP zugewiesen, als der Server selbst. Im Zweifel kann die korrekte IP auch im Router ermittelt werden.
Vom Client aus verbindet man sich nun mit dem Server per SSH mit dem Befehl:
ssh root@server-ip
Die Anmeldung bei dropbear erfolgt immer mit dem root
-Benutzer. Die Verbindung wird anschließend in einer BusyBox-Shell etabliert.
Das eigentliche Freischalten der verschlüsselten Festplatte erfolgt danach über den Befehl:
cryptroot-unlock
Nach Eingabe der korrekten Passphrase ist die Partition erfolgreich entschlüsselt worden und der Bootvorgang wird fortgesetzt. Die SSH-Verbindung zu dropbear wird automatisch getrennt. Wenn der Server hochgefahren ist, kann sich wieder mit dem normalen SSH-Benutzer auf diesen verbunden werden.
Wenn du diese Schritte beim Bootvorgang automatisieren willst, kannst du Programme wie FDEunlock verwenden.
Bei Problemen¶
Ein Entsperren per angeschlossener Tastatur ist jederzeit möglich. Dropbear kann durch einfaches Drücken der ⏎ Taste übersteuert werden und es erscheint die Eingabe zum Entsperren der Festplatte.
Links¶