Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Anleitung zur Installation eines voll verschluesselten Ubuntu 22.04

profile picture
Author
Hetzner Online
Published
2024-04-10
Time to read
5 minutes reading time

Einleitung

Das installimage Skript in dem Hetzner Rescue System bietet eine einfache Möglichkeit, verschiedene Linux-Distributionen zu installieren.

Dieses Tutorial zeigt, wie man mit installimage ein verschlüsseltes Ubuntu 22.04-System installiert und eine Entschlüsselung per SSH (dropbear) in initramfs hinzufügt, das in einer separaten /boot-Partition gespeichert ist.

Voraussetzungen

  • Hetzner-Konto
  • Server welcher in das Rescue-System gebootet ist
  • Öffentlicher RSA, ECDSA oder ED25519 SSH-Schlüssel
  • Keine privaten Netzwerke über die Hetzner Cloud an den Servern angeschlossen

Schritt 1 - Erstellen oder Kopieren des öffentlichen SSH-Schlüssels

Um das verschlüsselte System aus der Ferne entsperren zu können, wird ein SSH-Schlüssel benötigt. Dieser Schlüssel wird auch für die spätere Anmeldung am gebooteten System verwendet. Der in Ubuntu 22.04 enthaltene SSH-Daemon dropbear unterstützt RSA, ED25519 und ECDSA-Schlüssel. Wenn du keinen solchen Schlüssel hast, musst du einen generieren. Wir empfehlen die Nutzung von ED25519 oder ECDSA Schlüsseln

Um z. B. einen ED25519-Schlüssel zu erzeugen, führe folgenden Befehl auf dem Client aus:

ssh-keygen -t ed25519

Kopiere anschließend den öffentlichen Schlüssel auf das Rescue System, z. B. mit scp:

scp ~/.ssh/id_ed25519.pub root@<your-host>:/tmp/authorized_keys

Schritt 2 - Erstellen oder Kopieren der installimage-Konfigurationsdatei

Wenn das installimage Skript ohne Optionen aufgerufen wird, startet es im interaktiven Modus und öffnet einen Editor, nachdem ein Distributionsimage ausgewählt wurde. Nach dem Verlassen des Editors wird die Installation fortgesetzt und die entsprechende Konfiguration wird als /installimage.conf im installierten System gespeichert. In diesem Tutorial werden wir eine solche Konfigurationsdatei direkt zur Installation übergeben.

Erstelle eine Datei /tmp/setup.conf mit folgendem Inhalt oder kopiere diese auf den Server im Rescue-System.

Hinweis: Ersetze secret durch ein sicheres Passwort und passe die Laufwerksnamen und die Partitionierung nach Bedarf an.

CRYPTPASSWORD secret
DRIVE1 /dev/sda
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART /     ext4 all crypt
IMAGE /root/images/Ubuntu-2204-jammy-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Diese Konfiguration installiert Ubuntu auf einem einzelnen Laufwerk (/dev/sda) mit einer separaten unverschlüsselten /boot Partition, das für die Entschlüsselung benötigt wird.

Beispiel für zwei Laufwerke (RAID1)
CRYPTPASSWORD secret
DRIVE1 /dev/sda
DRIVE2 /dev/sdb
SWRAID 1
SWRAIDLEVEL 1
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART /     ext4 all crypt
IMAGE /root/images/Ubuntu-2204-jammy-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Schritt 3 - Post-Installations-Skript erstellen oder kopieren

Um die verschlüsselte Partition über SSH zu entsperren, müssen wir den Dropbear-SSH-Server installieren und zum initramfs hinzufügen, das auf der unverschlüsselten /boot-Partition gespeichert ist. Dadurch wird auch die Einbindung von dhclient zur Konfiguration des Netzwerks ausgelöst, allerdings ohne jegliche Extras. Um die Unterstützung für die Hetzner Cloud zu aktivieren, müssen wir einen Hook hinzufügen, der die Unterstützung für RFC3442-Routen beinhaltet.

Um diese zusätzlichen Schritte ausführen zu können, benötigen wir ein Post-Install-Skript für das installimage Skript.

Erstelle im Rescue-System eine Datei /tmp/post-install.sh mit folgendem Inhalt:

#!/bin/bash

add_rfc3442_hook() {
  cat << EOF > /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
#!/bin/sh

PREREQ=""

prereqs()
{
        echo "\$PREREQ"
}

case \$1 in
prereqs)
        prereqs
        exit 0
        ;;
esac

if [ ! -x /sbin/dhclient ]; then
        exit 0
fi

. /usr/share/initramfs-tools/scripts/functions
. /usr/share/initramfs-tools/hook-functions

mkdir -p \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
cp -a /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
EOF

  chmod +x /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
}

remove_unwanted_netplan_config() {
  cat << EOF > /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
#!/bin/sh

if [ -d "/run/netplan" ]; then
  interface=\$(ls /run/netplan/ | cut -d'.' -f1)

  if [ \${interface:+x} ]; then
    rm -f /run/netplan/"\${interface}".yaml
  fi
fi
EOF

  chmod +x /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
}

# Hook installieren
add_rfc3442_hook

# Hinzufügen eines initramfs-tools Skript um /run/netplan/{interface}.yaml,
# zu entfernen, weil diese ungewollte Routen hinzufügt
remove_unwanted_netplan_config

# System updaten
apt-get update >/dev/null
apt-get -y install cryptsetup-initramfs dropbear-initramfs

# Kopieren des SSH-Schlüssels für Dropbear und Port ändern
cp /root/.ssh/authorized_keys /etc/dropbear/initramfs/
sed -ie 's/#DROPBEAR_OPTIONS=/DROPBEAR_OPTIONS="-I 600 -j -k -p 2222 -s"/' /etc/dropbear/initramfs/dropbear.conf
dpkg-reconfigure dropbear-initramfs
update-initramfs -u

Wichtiger Hinweis: Das Post-Installations-Skript muss ausführbar gemacht werden:

chmod +x /tmp/post-install.sh

Schritt 4 - Installation starten

Prüfe vor dem Start der Installation nochmals den Inhalt der folgenden Dateien:

  • /tmp/authorized_keys - Ihr öffentlicher SSH-Schlüssel (RSA, ECDSA or ED25519)
  • /tmp/setup.conf - die Installationskonfiguration
  • /tmp/post-install.sh - ist ausführbar und enthält das Post-Installations-Skript

Jetzt kann die Installation mit dem folgenden Befehl gestartet werden:

installimage -a -c /tmp/setup.conf -x /tmp/post-install.sh

Warte, bis die Installation abgeschlossen ist, und prüfe die debug.txt-Datei auf eventuelle Fehler.

Schritt 5 - Installiertes System booten

Nachdem die Installation abgeschlossen ist und alle Fehler behoben wurden, kann reboot ausgeführt werden, um den Server neu zu starten und das neu installierte System zu booten. Man kann den Boot-Vorgang beobachten, wenn eine KVM angeschlossen ist oder über die Remote-Konsole einer jeweiligen Cloud-Instanz.

Nach einiger Zeit sollte der Server auf einen Ping reagieren. Melde dich nun per SSH an dropbear an und führe cryptroot-unlock aus, um die verschlüsselte(n) Partition(en) zu entsperren.

  • Mit ED25519 oder ECDSA Schlüssel

    ssh -p 2222 root@<your-host>
  • Mit RSA Schlüssel
    Im Falle von RSA, müssen wir explizit angeben, dass dieser Schlüssel akzeptiert wird.

    ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa

Beispiel:

$ ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa

BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) built-in shell (ash)
Enter 'help' for a list of built-in commands.

# cryptroot-unlock 
Please unlock disk luks-80e097ad-c0ab-47ce-9302-02dd316dc45c:

Wenn das Passwort korrekt ist, wird der Bootvorgang fortgesetzt und die temporären SSH-Sitzung wird automatisch beendet.

Nach ein paar Sekunden kannst du dich an deinem neuen System anmelden.

Hinweis: Diese Anleitung ist explizit nur für Ubuntu 22.04 geschrieben. Es könnte sein, dass diese nicht auf anderen Distributionen funktioniert.

License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Dedicated Servers

Configure your dream server. Top performance with an excellent connection at an unbeatable price!

Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more