Lennart Poettering () auf der All Systems Go 2019-Konferenz als neues Component des Systemmanagers systemd — , mit dem Ziel, die Portabilität der Benutzerhome-Verzeichnisse zu gewährleisten und diese von den Systemeinstellungen zu trennen. Die Hauptidee des Projekts besteht darin, autarke Umgebungen für Benutzerdaten zu schaffen, die zwischen verschiedenen Systemen transferiert werden können, ohne sich um die Synchronisation von Identifikatoren und Datenschutz zu kümmern.
Die Home-Verzeichnisumgebung wird in Form eines bereitgestellten Image-Formats geliefert, dessen Daten verschlüsselt sind. Die Benutzeranmeldedaten sind an das Home-Verzeichnis gebunden und nicht an die Systemeinstellungen — anstelle von /etc/passwd und /etc/shadow wird im JSON-Format verwendet, das im Verzeichnis ~/ .identity gespeichert ist. Das Profil enthält die benötigten Parameter für die Benutzerfunktionalität, einschließlich Angaben zu Namen, Passwort-Hash, Schlüsseln zur Verschlüsselung, Quoten und bereitgestellten Ressourcen. Das Profil kann mit einer digitalen Signatur versehen werden, die auf einem externen Yubikey-Token gespeichert ist.
Die Parameter können auch zusätzliche Informationen enthalten, wie SSH-Schlüssel, Daten für die biometrische Authentifizierung, ein Bild, E-Mail, Adresse, Zeitzone, Sprache, Limits für die Anzahl der Prozesse und den Speicher, zusätzliche Montageflags (nodev, noexec, nosuid), Informationen zu benutzten IMAP/SMTP-Servern, Angaben zur Aktivierung der Familienkontrolle, Backup-Optionen usw. Ein API steht zur Verfügung, um Parameter anzufordern und zu analysieren. .
Die Zuordnung und Verarbeitung von UID/GID erfolgt dynamisch in jedem lokalen System, mit dem das Home-Verzeichnis verbunden ist. Mit dem angebotenen System kann der Benutzer sein Home-Verzeichnis bei sich behalten, z. B. auf einem Flash-Laufwerk, und erhält eine Arbeitsumgebung auf jedem Computer, ohne ein Konto darauf anlegen zu müssen (das Vorhandensein einer Datei mit dem Abbild des Home-Verzeichnisses führt zur Synthese des Benutzers).
Für die Verschlüsselung von Daten wird das LUKS2-Subsystem empfohlen, jedoch unterstützt systemd-homed auch andere Backend-Lösungen, beispielsweise für unverschlüsselte Verzeichnisse, Btrfs, Fscrypt und Netzwerkeinstellungen wie CIFS. Zur Verwaltung portabler Verzeichnisse steht das Tool homectl zur Verfügung, mit dem Benutzerverzeichnisse erstellt und aktiviert, deren Größe geändert und Passwörter festgelegt werden können.
Auf Systemebene wird der Betrieb durch folgende Komponenten gewährleistet:
- systemd-homed.service – verwaltet das Benutzerverzeichnis und bettet JSON-Einträge direkt in die Benutzerverzeichnismodelle ein;
- pam_systemd – verarbeitet die Parameter aus dem JSON-Profil beim Benutzerlogin und wendet sie im Kontext der aktivierenden Sitzung an (führt Authentifizierung durch, konfiguriert Umgebungsvariablen usw.);
- systemd-logind.service – bearbeitet Parameter aus dem JSON-Profil beim Benutzerlogin, wendet verschiedene Einstellungen zur Ressourcenverwaltung an und legt Limits fest;
- nss-systemd – NSS-Modul für glibc, synthetisiert klassische NSS-Einträge basierend auf dem JSON-Profil und bietet Rückwärtskompatibilität zur UNIX-API für die Benutzerverarbeitung (/etc/passwd);
- PID 1 — erstellt dynamisch Benutzer (analog zur Anwendung der Direktive DynamicUser in Einheiten) und macht sie für das restliche System sichtbar;
- systemd-userdbd.service — übersetzt UNIX/glibc NSS-Konten in JSON-Datensätze und bietet eine einheitliche Varlink-API für die Abfrage und Durchsuchung von Datensätzen.
Zu den Vorteilen des vorgeschlagenen Systems zählen die Möglichkeit der Benutzerverwaltung beim Mounten des Verzeichnisses /etc im Nur-Lese-Modus, die Notwendigkeit, Benutzer-IDs (UID/GID) zwischen Systemen nicht synchronisieren zu müssen, die Unabhängigkeit des Benutzers von einem bestimmten Computer, die Sperrung der Benutzerdaten beim Wechsel in den Energiesparmodus, der Einsatz von Verschlüsselung und modernen Authentifizierungsmethoden. Systemd-homed soll in die Hauptversion von systemd in den Releases 244 oder 245 aufgenommen werden.
Beispiel für ein JSON-Benutzerprofil:
„autoLogin“: true,
„binding“: {
„15e19cd24e004b949ddaac60c74aa165“: {
„fileSystemType“: „ext4“ ,
„fileSystemUUID“: „758e88c8-5851-4a2a-b98f-e7474279c111“ ,
„gid“: 60232,
„homeDirectory“: „/home/test“ ,
„imagePath“: „/home/test.home“ ,
„luksCipher“: „aes“ ,
„luksCipherMode“: „xts-plain64“ ,
„luksUUID“: „e63581ba-79fa-4226-b9de-1888393f7573“ ,
„luksVolumeKeySize“: 32,
„partitionUUID“: „41f9ce04-c927-4b74-a981-c669f93eb4dc“ ,
„storage“: „luks“ ,
„uid“: 60233
}
},
«Disposition» : «regelmäßig»,
«PasswordPolicyDurchsetzung» : false,
«letzteÄnderungUSec» : 1565951024279735,
«MitgliedVon» : [
«wheel»
],
«privilegiert» : {
«gehashtePasswort» : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]
},
«signatur» : [
{
«daten» : «LU/HeVrPZSzi3M3J…==»,
«schlüssel» : «——BEGIN PUBLIC KEY——\nMCowBQADK2VwAy…=\n——END PUBLIC KEY——\n»
}
],
«benutzername» : «test»,
«status» : {
«15e19cf24e004b949dfaac60c74aa165» : {
«guterAuthentifizierungsZähler» : 16,
«letzteGuteAuthentifizierungUSec» : 1566309343044322,
«rateLimitBeginUSec» : 1566309342341723,
«rateLimitZahl» : 1,
«status» : «inaktiv»,
«dienst» : «io.systemd.Home»,
«festplattengröße» : 161218667776,
«festplattendeckel» : 191371729408,
«festplattengrund» : 5242780,
«lokalUnterzeichnet» : true,
}
}
Quelle: opennet.ru
