Wenn man ein Ubuntu komplett mittels LUKS verschlüsselt muss beim Starten ein Passwort eingegeben werden. Da man nicht immer physischen Zugriff auf den Server hat, wenn man ihn neu starten muss, ist es gut die Option zu haben das Passwort remote über SSH einzugeben. Über den normalen SSH Server ist dies nicht möglich, da das Passwort schon eingegeben werden muss, bevor der SSH Server startet. In diesem Artikel beschreibe ich, wie dropbear so konfiguriert werden kann, um über ihn bzw. SSH das LUKS Passwort einzugeben. Ich nehme in diesem Arikel an, dass der Server beim starte eine bekannte IP Adresse per DHCP zugewiesen bekommt.
Zuerst muss dropbear installiert werden. Das Paket dropbear-initramfs ist die initramfs integration von dropbear.
$ sudo apt install dropbear-initramfs Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: dropbear-bin libtomcrypt1 libtommath1 The following NEW packages will be installed: dropbear-bin dropbear-initramfs libtomcrypt1 libtommath1 0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. Need to get 535 kB of archives. After this operation, 1635 kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://de.archive.ubuntu.com/ubuntu focal/main amd64 libtommath1 amd64 1.2.0-3 [53.0 kB] Get:2 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 libtomcrypt1 amd64 1.18.2-3 [360 kB] Get:3 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 dropbear-bin amd64 2019.78-2build1 [113 kB] Get:4 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 dropbear-initramfs all 2019.78-2build1 [8992 B] Fetched 535 kB in 0s (1273 kB/s) Selecting previously unselected package libtommath1:amd64. (Reading database ... 107150 files and directories currently installed.) Preparing to unpack .../libtommath1_1.2.0-3_amd64.deb ... Unpacking libtommath1:amd64 (1.2.0-3) ... Selecting previously unselected package libtomcrypt1:amd64. Preparing to unpack .../libtomcrypt1_1.18.2-3_amd64.deb ... Unpacking libtomcrypt1:amd64 (1.18.2-3) ... Selecting previously unselected package dropbear-bin. Preparing to unpack .../dropbear-bin_2019.78-2build1_amd64.deb ... Unpacking dropbear-bin (2019.78-2build1) ... Selecting previously unselected package dropbear-initramfs. Preparing to unpack .../dropbear-initramfs_2019.78-2build1_all.deb ... Unpacking dropbear-initramfs (2019.78-2build1) ... Setting up libtommath1:amd64 (1.2.0-3) ... Setting up libtomcrypt1:amd64 (1.18.2-3) ... Setting up dropbear-bin (2019.78-2build1) ... Setting up dropbear-initramfs (2019.78-2build1) ... Generating Dropbear DSS host key. Please wait. Generating 1024 bit dss key, this may take a while... 1024 SHA256:JDWKym87Slb69njtU+6JOzXLaoNbPaAz5/Crg&VVzEE root@server02 (DSA) +---[DSA 1024]----+ | .E. | | . | | o o | |. o = | |.o. . o S. | |..o+ o. o | | ..oo oO o o | | .ooO=*oX . | | .*@=B==++. | +----[SHA256]-----+ Generating Dropbear RSA host key. Please wait. Generating 2048 bit rsa key, this may take a while... 2048 SHA256:oY1qGNXZ6WuL1p3sTgHbJktzVEWQ7mnOOORZ39KHKUY root@server02 (RSA) +---[RSA 2048]----+ | .+o | | . o . .. | | . o + .. E | | . = . ... | | . o S o...o | | o . = oo+.. | | . o .Oo*o++. | | . .++@=+..o | | ...++. +o | +----[SHA256]-----+ Generating Dropbear ECDSA host key. Please wait. Generating 256 bit ecdsa key, this may take a while... 256 SHA256:u/g9oA7OLW30cGPlvBV7Ha4A7fi2TUpVeL8FFIazHkv root@server02 (ECDSA) +---[ECDSA 256]---+ | .. o*=+| | .. +=+o| | ... o++ | | o. o.o +. | | S+.* o. | | ..o*oo . | | ..oo..o .| | ..o..=oo. .| | .o.oo.*+. E | +----[SHA256]-----+ update-initramfs: deferring update (trigger activated) Dropbear has been added to the initramfs. Don't forget to check your "ip=" kernel bootparameter to match your desired initramfs ip configuration. Processing triggers for man-db (2.9.1-1) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... Processing triggers for initramfs-tools (0.136ubuntu6) ... update-initramfs: Generating /boot/initrd.img-5.4.0-37-generic dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!
Zuerst notieren wir uns den Hashwert des RSA host key (rot markiert), da wir beim ersten Verbinden mit dropbear nach diesem gefragt werden um zu verifizieren, dass wir mit dem richtigen Server kommunizieren.
Jetzt kümmern wir uns um die Fehlermeldung am Ende. Sie sagt, dass wir noch unseren öffentlichen Schlüssel zum Authentifizieren in der authorized_keys Datei hinterlegen müssen – Wie man sich Schlüssel zum Authentifizieren unter Ubuntu erstellt habe ich im Artikel SSH Authentifizierung mittels Public-Keys beschrieben. Hier ist zu beachten, dass die aktuelle Version von dropbear – zumindest die, welche Ubuntu 20.04 standardmäßig mitliefert – kein ED25519 unterstützt. Deshalb werden wir unseren RSA Schlüssel hinterlegen.
Dazu einfach die Datei /etc/dropbear-initramfs/authorized_keys auf dem Server als Superuser öffnen und den RSA Schlüssel (~/.ssh/id_rsa.pub) einfügen.
$ sudo nano /etc/dropbear-initramfs/authorized_keys
Da dropbear einen eigenen bzw. anderen RSA Host Key verwendet als OpenSSH in Ubuntu und pro Host und Port nur ein Host Key hinterlegt sein kann, würde bei jedem Verbinden mit dem anderen SSH Server eine Fehlermelden kommen und die known_hosts Datei müsste angepasst werden – Es ist aus Sicherheitsaspekten nicht ratsam den gleichen Host Key zu verwenden. Dieses Problem kann ganz einfach mit einer eigenen SSH Konfiguration für dropbear auf dem Client umgangen werden in der eine alternative known_hosts Datei angegeben wird. Die SSH Konfiguration auf Clientseite könnte beispielsweise so aussehen:
Host server-unlock Hostname xxx.xxx.xxx.xxx User root UserKnownHostsFile ~/.ssh/known_hosts.initramfs
Weitere Einstellungsmöglichkeiten der Client SSH Konfiguration beschreibe ich in dem Artikel Konfigurationsdatei zum Verwalten von SSH Verbindungen.
Damit wir uns den Befehl zum Entschlüsseln nicht merken bzw. immer eingeben müssen können wir dropbear so konfigurieren, dass es den Befehl zum Entschlüsseln automatisch ausführt, wenn wir uns verbinden und wir nur noch das Passwort eingeben müssen. Dazu muss die Datei /etc/dropbear-initramfs/config um folgendes ergänzt werden:
DROPBEAR_OPTIONS='-c cryptroot-unlock'
Da wir uns immer mittels RSA authentifizieren lösche ich noch die Host Keys für die Authentifizierung mittels DSA und ECDSA.
$ sudo rm /etc/dropbear-initramfs/dropbear_dss_host_key /etc/dropbear-initramfs/dropbear_ecdsa_host_key
Jetzt müssen wir noch das initframfs Image aktualisieren um alle gemachten Änderungen zu übernehmen
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.x.x-xx-generic
Jetzt starten wir einmal neu um das System testweise über SSH zu entschlüsseln.
$ sudo reboot
Nun verbinden wir uns über die angelegte Konfiguration mit dem Server.
$ ssh server-unlock The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is SHA256:oY1qGNXZ6WuL1p3sTgHbJktzVEWQ7mnOOORZ39KHKUY. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (RSA) to the list of known hosts. Enter passphrase for key '/home/user/.ssh/id_rsa': Please unlock disk dm_crypt-1: cryptsetup: dm_crypt-1 set up successfully Connection to xxx.xxx.xxx.xxx closed by remote host. Connection to xxx.xxx.xxx.xxx closed.
Wie man sieht musste zuerst der Host Key von dropbear bestätigt werden – dies muss nur einmal gemacht werden. Nach dem öffnen des eigenen Schlüssels wurde sofort nach dem Passwort für die LUKS partition gefragt. Nach dem Entschlüsseln der Partition wurde die Verbindung sofort wieder getrennt und der Server bootet in Ubuntu.
Der Benutzername bei dropbear musste bei mir root sein! Also zum Unlocken verbinden mit
$ ssh root@server-unlock
Ja, wie in der SSH Konfiguration auf Clientseite hinterlegt.
Danke für dein ‚How-to‘ !
EIn kleines Update dafür:
ED25519 wird mittlerweile unterstützt.
Vorhin mit Ubuntu Jammy ausprobiert, funktioniert wunderbar. Der Pfad zu dropbear-initramfs hat sich jedoch leicht geändert. Der lautet jetzt /etc/dropbear/initramfs
Bei der installation von dropbear-initramfs wurde auch ein ED25519 generiert, habe jedoch nicht ausprobiert, ob der Login damit auch funktioniert. Vielleicht mache ich das später noch.
VG
Ben
Sehr nice 🙂