ubuntuusers.de

Verschlüsseltes System via SSH freischalten

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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.

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.

Diese Revision wurde am 6. Dezember 2023 22:05 von nExli erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Server, Installation, System, Netzwerk, Internet, Ubuntu, Sicherheit, Shell, Boot, SSH, LUKS, Verschlüsselung, Dropbear