Arch Linux: LUKS-voll-verschlüsseltes System beim Booten per SSH entsperren (mittels systemd und Dropbear)
Nachdem ich meinen Homelab-Server auf Arch Linux umgestellt habe, wollte ich wie zuvor bei Debian mein mit LVM on LUKS voll-verschlüsseltes System per SSH entsperren können. Erste Anlaufstelle war für mich wie immer das Arch-Linux-Wiki. Die im Wiki vorgestellten Lösungen verwenden jedoch zum gegenwärtigen Zeitpunkt alle min. ein Paket aus dem Arch User Repository (AUR). Aus Sicherheitsgründen versuche ich, wenn möglich, AUR-Pakete zu vermeiden. Nach etwas Recherche habe ich dann eine Lösung mithilfe des Pakets mkinitcpio-systemd-tool in Verbindung mit dem SSH-Server Dropbear gefunden. Welche Schritte diesbzgl. zum Einrichten nötig sind, findet ihr im folgenden Beitrag.
Voraussetzungen
Für die Generierung des initramfs sind die systemd-Hooks systemd, sd-vconsole und sd-encrypt anstelle der Busybox-Hooks udev und encrypt zu verwenden.
Kernel-Parameter für Netzwerkverbindung hinzufügen
Damit während des Bootens durch das initramfs-System eine Netzwerkverbindung hergestellt wird, müsst ihr eure Kernel-Cmdline um den Parameter ip ergänzen. In meinem Fall passe ich dazu bei mir /etc/kernel/cmdline an (wird bei mir von systemd-ukify zum Generieren eines Unified Kernel Image verwendet):
rd.luks.name=MY_UUID=system_lvm root=LABEL=root rw ip=dhcp quiet lsm=landlock,lockdown,yama,apparmor,bpf lockdown=integrityPakete dropbear und mkinitcpio-systemd-tool installieren und einrichten
Als erstes werden die benötigten Pakete wie folgt installiert:
sudo pacman -S dropbear mkinitcpio-systemd-tool
Dropbear für initramfs konfigurieren
Das Paket mkinitcpio-systemd-tool installiert den systemd-Service initrd-dropbear. Bevor wir diesen Service aktivieren, überschreiben wir die Service-Datei, um individuell die Dropbear-Parameter angeben zu können:
sudo systemctl edit initrd-dropbear.service
Folgende Zeilen habe ich bei mir hinterlegt:
[Service]
ExecStart=
ExecStart=/bin/dropbear -s -j -k -F -p ${SSHD_PORT} -c "/usr/bin/systemd-tty-ask-password-agent --query" Details zu den einzelnen Parametern lassen sich hier nachlesen: dropbear-man. In meinem Fall habe im Prinzip so gut wie alles eingeschränkt bzw. deaktiviert. Letztendlich kann man sich nur per Public-Key-Authentifizierung anmelden und es wird dann direkt der Befehl /usr/bin/systemd-tty-ask-password-agent --query ausgeführt. Dieser dient dazu die LUKS-Passphrase-Abfrage anzuzeigen. Nachdem man diese dann eingegeben hat, wird der Dropbear-Dienst beendet. Es lassen sich also keine weiteren Befehle außer dem angegeben über diese SSH-Verbindung ausführen.
Als nächstes müsst ihr in folgender Datei euren SSH-Public-Key hinterlegen:
/etc/mkinitcpio-systemd-tool/config/authorized_keys
Um die Dropbear-Einrichtung abzuschließen, aktiviert nun noch den systemd-Service:
sudo systemctl enable initrd-dropbear.service
mkinitcpio konfigurieren
In der /etc/mkinicpio.conf ist in der HOOKS-Zeile am Ende der Hook systemd-tool hinzufügen. Bei mir sieht das Ganze wie folgt aus:
HOOKS=(base systemd autodetect keyboard keymap sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck systemd-tool)initramfs und ggf. Kernel erzeugen
Nachdem alles konfiguriert ist, kann das initramfs neu erzeugt werden:
sudo mkinitcpio -P
Falls bei euch noch nicht vorhanden, erzeugt der systemd-tool-Hook einen SSH-Host-Key im Verzeichnis /etc/dropbear.
Je nachdem welchen Bootmanager ihr verwendet und euer Bootprozess funktioniert, sollte die Generierung des initramfs bereits ausreichend sein. In meinem Fall, da ich Unified Kernel Images, signiert mit meinem eigenen UEFI-Secure-Boot-Key, verwende, muss ich bei mir noch einmal das UKI erzeugen.
SSH-Verbindung herstellen und System entsperren
Startet nun euer Systen neu. Verbindet euch nun mit eurem PC/Notebook mit eurem Server. Nach erfolgreicher Anmeldung solltet ihr nach der LUKS-Passphrase gefragt werden:
ssh root@server
Please enter passphrase for disk system (system_lvm): (press TAB for no echo)Fazit
Arch Linux lässt sich ohne größeren Aufwand so einrichten, dass ein mit LUKS verschlüsseltes System auch während des Bootvorgangs per SSH entsperrt werden kann. In Verbindung mit Wake On LAN kann man so seinen Server auch aus der Ferne starten und entsperren.