systemd-homed – Verschlüsselte Home-Verzeichnisse

systemd-homed ist ein recht neuer Ersatz für ältere Lösungen wie eCryptFS. Dabei ist zu beachten, dass neben der Verschlüsselung des Home-Verzeichnisses noch einige andere Funktionen zum Einsatz kommen.

systemd-homed revolutioniert die Art wie man mit Linux Benutzer verwaltet. Metadaten zum Benutzer werden innerhalb des Home-Verzeichnisses in der Datei.identity gespeichert. Dadurch sind portable Benutzerverzeichnisse erstmals ohne Probleme möglich. Ein weiterer Vorteil ist die Option Home-Verzeichnisse zu verschlüsseln und dadurch alle Metadaten zum Benutzer ebenso zu verschlüsseln.

Verschiedene Varianten

Es gibt unterschiedliche Optionen, ein Home-Verzeichnis mit systemd-homed zu betreiben. Eine davon ist ansonsten für Linux noch überhaupt nicht verbreitet. Grundsätzlich basieren alle Lösungen auf einem verschlüsselten Verzeichnis /home/<benutzername>.homedir. Beim Login wird dies regulär als /home/<benutzername> eingehängt.

  • Nicht verschlüsseltes Btrfs-Subvolume: Obwohl Verschlüsselung konzeptionell in systemd-homed vorgesehen ist, kann man auch einfach das Home-Verzeichnis auf einem Btrfs-Subvolume ohne Verschlüsselung ablegen.
  • Verschlüsselung mit ext4 und fscrypt: Google hat für Android vor einiger Zeit eine native Dateisystemverschlüsselung namens fscrypt entwickelt. Diese existiert für die Dateisysteme ext4, F2FS und UBIFS. Relevant für Linux ist hier primär ext4. Die Verschlüsselung erfolgt als transparente dateibasierte Verschlüsselung und ist nicht so sicher wie z. B. LUKS.
  • Verschlüsselung mit LUKS: Hier wird dateisystemunabhängig ein LUKS-Volume in einer Loopback-Datei erzeugt. Innerhalb des LUKS-Volume findet ext4, Btrfs oder XFS Verwendung. Diese Lösung ist mit Abstand die sicherste Variante.

Die transparente Verschlüsselung mit fscrypt und die containerbasierte LUKS-Variante haben beide Vor- und Nachteile. LUKS ist sicherer und ein etablierter Standard. Der Container hat aber eine definierte Größe, die entweder konkret in GB oder in Prozent angegeben wird. Die Partition mit den Home-Verzeichnissen ist dann entsprechend belegt, selbst wenn innerhalb des Containers noch viel Platz ist. Fscrypt ist hier viel flexibler und orientiert sich einfach an der Partitionsgröße, aber dafür nicht so sicher, weil die Metadaten der Dateien offen liegen. Dafür ist der LUKS-Ansatz flexibler, was die Wahl des Dateisystems betrifft, während fscrypt quasi ext4 vorschreibt.

Einrichtung mit fscrypt

systemd-homed ist immer noch neu und experimentell. Es sollte noch nicht für Produktivsysteme genutzt werden und es werden tiefergehende Linux-Kenntnisse vorausgesetzt.

Aktuell unterstützt keine Distribution systemd-homed als Standard in der Installation. Eine Einrichtung kann daher nur manuell im Nachhinein erfolgen. Die folgende Anleitung basiert auf openSUSE Tumbleweed, ist aber prinzipiell auf andere Distributionen übertragbar.

Die Einrichtung geschieht auf einem TTY. Hier wechselt man auf dem Loginbildschirm (z. B. SDDM oder GDM) per Strg + ALt F1 auf die Konsole.

Für die Verwendung von systemd-homed sind je nach Distribution zusätzliche Pakete und Veränderungen an PAM notwendig:

# zypper in systemd-homed nss-systemdCode-Sprache: PHP (php)

Anschließend verändert man die PAM-Einstellungen für systemd-homed. Hierzu ist keine manuelle Bearbeitung notwendig, sondern das geschieht mit folgendem Befehl:

# pam-config -a --systemd_homeCode-Sprache: PHP (php)

Anschließend ist ggf. noch manuell eine Datei zu bearbeiten: /etc/nsswitch.conf Hier folgende zwei Zeilen wie folgt um den Zusatz systemd ergänzen. Es kann sein, dass die Angabe bereits enthalten ist. Dann ist eine Ergänzung selbstredend nicht notwendig.

passwd: compat systemd
group: compat systemdCode-Sprache: HTTP (http)

Hiernach aktiviert man den homed-Service:

# systemctl enable --now systemd-homedCode-Sprache: PHP (php)

Wenn man ein LUKS-Homeverzeichnis anlegen möchte, reicht das bereits, für fscrypt muss das ext4-Dateisystem ggf. angepasst werden. Dazu muss die Partition zuerst ausgehängt werden.

# umout /homeCode-Sprache: PHP (php)

Je nach Distribution und alter der Installation muss man noch das Dateisystem optimieren, den Checksums-Support aktivieren und das Dateisystem auf 64bit konvertieren. Pfadangaben sind entsprechend auf das ext4-Dateisystem für das Home-Verzeichnis anzupassen. Je nach Standardkonfiguration sind manche Schritte davon vielleicht nicht notwendig, das Dateisystem meldet dann, dass die Funktion bereits aktiviert ist. Das ist also nicht schädlich.

# e2fsck -Df /dev/<disk>
# resize2fs -b /dev/<disk>
# tune2fs -O metadata_csum /dev/<disk>
Code-Sprache: HTML, XML (xml)

Nun muss noch fscrypt aktiviert werden:

# tune2fs -O encrypt /dev/<disk>Code-Sprache: HTML, XML (xml)

Anschließend überprüfen, ob alle notwendigen Funktionen aktiviert sind.

# dumpe2fs -h /dev/<disk>| grep features:Code-Sprache: HTML, XML (xml)

Die Ausgabe sollte wie folgt aussehen. Wichtig ist vor allem encypt bei den Filesystem Features.

dumpe2fs 1.46.4 (18-Aug-2021)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg encrypt sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Journal features:         journalLinux_incompat_revoke journal_64bit journal_checksum_v3
Code-Sprache: CSS (css)

Nun muss man entweder die Home-Partiton wieder einhängen oder zur Sicherheit einmal komplett neustarten und auf das TTY zurückkehren.

Benutzer verwaltet man für systemd-homed mittels des Tools homectl. Mit folgendem Befehl legt man einen neuen Benutzer an und nutzt fscrypt ohne Quota.

# homectl create <username> --storage=fscryptCode-Sprache: HTML, XML (xml)

Anschließend neustarten und sich wie gewohnt z. B. via SDDM einlogen.

Probleme und Grenzen

Aktuell gibt es natürlich noch einige Limitationen, schließlich ist das Ganze eine noch relativ junge Entwicklung und bei keiner Distribution standardmäßig aktiviert. Grafische Tools wie die Benutzerverwaltung von KDE, SDDM oder auch der YaST Usermanager erkennen den mittels homectl angelegten Benutzer nicht. Das hat z. B. zur Folge, dass man beim Loginbildschirm Benutzername und Passwort eingeben muss und keinen Benutzer per Icon auswählen kann.

Die Verwaltung der Benutzer erfolgt ebenso nur über homectl, weshalb Tipps im Internet oder Informationen über Systemmeldungen, wie man Benutzer zu Gruppen hinzufügt und ähnliches, nicht funktionieren.