Lennart Poettering () auf der Konferenz All Systems Go 2019 wurde eine neue Komponente des Systemmanagers systemd — , die darauf abzielt, die Tragbarkeit der Benutzerhome-Verzeichnisse zu gewährleisten und diese von den Systemeinstellungen zu trennen. Die Hauptidee des Projekts besteht darin, eigenständige Umgebungen für Benutzerdaten zu schaffen, die zwischen verschiedenen Systemen transportiert werden können, ohne sich um die Synchronisation von Identifikatoren und Datenschutz kümmern zu müssen.
Die Umgebung des Home-Verzeichnisses wird in Form eines einbindbaren Abbildes bereitgestellt, dessen Daten verschlüsselt sind. Die Benutzeranmeldeinformationen sind an das Home-Verzeichnis gebunden und nicht an die Systemeinstellungen — anstelle von /etc/passwd und /etc/shadow wird verwendet im JSON-Format, das im Verzeichnis ~/ .identity gespeichert wird. Im Profil sind die Parameter aufgeführt, die für die Nutzung durch den Benutzer erforderlich sind, einschließlich Informationen zum Namen, Passwort-Hash, Schlüsseln für die 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 wie SSH-Schlüssel, Daten zur biometrischen Authentifizierung, Bild, E-Mail, Adresse, Zeitzone, Sprache, Einschränkungen für die Anzahl der Prozesse und den Speicher, zusätzliche Einhängesymbole (nodev, noexec, nosuid), Daten zu verwendeten IMAP/SMTP-Servern, Informationen zur Aktivierung der Elternkontrolle, Sicherungsparameter usw. enthalten. Ein API wird bereitgestellt, um Anfragen und die Analyse der Parameter zu ermöglichen .
Die Zuordnung und Verarbeitung von UID/GID erfolgt dynamisch in jedem lokalen System, mit dem das Home-Verzeichnis verbunden ist. Mit dem vorgeschlagenen System kann der Benutzer sein Home-Verzeichnis bei sich behalten, beispielsweise auf einem Flash-Laufwerk, und auf jedem Computer eine Arbeitsumgebung erhalten, ohne ein Benutzerkonto dafür anlegen zu müssen (das Vorhandensein einer Datei mit dem Abbild seines Home-Verzeichnisses führt zur Synthese des Benutzers).
Für die Datenverschlüsselung wird das Subsystem LUKS2 empfohlen, aber systemd-homed ermöglicht auch die Verwendung anderer Backends, beispielsweise für unverschlüsselte Verzeichnisse, Btrfs, Fscrypt und CIFS-Netzwerkteile. Zur Verwaltung tragbarer Verzeichnisse wird das Tool homectl angeboten, das die Erstellung und Aktivierung von Heimatverzeichnis-Abbildern sowie die Größenänderung und Passwortvergabe ermöglicht.
Auf der Systemebene wird die Arbeit durch folgende Komponenten sichergestellt:
- systemd-homed.service – verwaltet das Heimatverzeichnis und integriert JSON-Datensätze direkt in Abbildungen des Heimatverzeichnisses;
- pam_systemd – verarbeitet Parameter aus dem JSON-Profil beim Benutzerlogin und wendet sie im Kontext der aktivierten Sitzung an (führt die Authentifizierung durch, konfiguriert Umgebungsvariablen usw.);
- systemd-logind.service – verarbeitet Parameter aus dem JSON-Profil beim Benutzerlogin, wendet verschiedene Ressourcenkontrollkonfigurationen an und setzt Limits;
- nss-systemd – NSS-Modul für glibc, synthetisiert klassische NSS-Datensätze basierend auf dem JSON-Profil und bietet Abwärtskompatibilität mit dem UNIX-API für die Benutzerverarbeitung (/etc/password);
- PID 1 – erstellt dynamisch Benutzer (synthetisiert analog zur Anwendung der DynamicUser-Direktive in den Einheiten) und macht sie für das übrige System sichtbar;
- systemd-userdbd.service – überträgt UNIX/glibc NSS-Konten in JSON-Datensätze und bietet eine vereinheitlichte Varlink-API zur Abfrage und Durchsuchung von Datensätzen.
Zu den Vorteilen des vorgeschlagenen Systems gehört die Möglichkeit, Benutzer beim Einhängen des Verzeichnisses /etc im Nur-Lese-Modus zu verwalten, die Notwendigkeit der Synchronisierung von Identifikatoren (UID/GID) zwischen Systemen zu vermeiden, die Unabhängigkeit des Benutzers von einem bestimmten Computer, die Sperrung der Benutzerdaten während des Übergangs in den Schlafmodus, die Anwendung von Verschlüsselung und modernen Authentifizierungsmethoden. Systemd-homed soll in die Hauptversion von systemd in der Veröffentlichung 244 oder 245 aufgenommen werden.
Beispiel eines JSON-Benutzerprofils:
"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": "regular",
"enforcePasswordPolicy": false,
«lastChangeUSec» : 1565951024279735,
«memberOf» : [
«wheel»
],
«privileged» : {
«hashedPassword» : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]
},
«signature» : [
{
«data» : «LU/HeVrPZSzi3M3J…==»,
«key» : «——BEGIN PUBLIC KEY—— MCowBQADK2VwAy…= ——END PUBLIC KEY—— »
}
],
«userName» : «test»,
«status» : {
«15e19cf24e004b949dfaac60c74aa165» : {
«goodAuthenticationCounter» : 16,
«lastGoodAuthenticationUSec» : 1566309343044322,
«rateLimitBeginUSec» : 1566309342341723,
«rateLimitCount» : 1,
«state» : «inactive»,
«service» : «io.systemd.Home»,
«diskSize» : 161218667776,
«diskCeiling» : 191371729408,
«diskFloor» : 5242780,
«signedLocally» : true
}
}
Quelle: opennet.ru
