Lennart Pöttering
Die Home-Verzeichnisumgebung liegt in Form einer bereitgestellten Image-Datei vor, deren Daten verschlüsselt sind. Benutzeranmeldeinformationen sind an das Home-Verzeichnis und nicht an die Systemeinstellungen gebunden – und nicht an /etc/passwd und /etc/shadow
Parameter können auch zusätzliche Informationen wie SSH-Schlüssel, biometrische Authentifizierungsdaten, Bild, E-Mail, Adresse, Zeitzone, Sprache, Prozess- und Speichergrenzen, zusätzliche Mount-Flags (nodev, noexec, nosuid) und Informationen über verwendete IMAP/SMTP-Server des Benutzers umfassen , Informationen zum Aktivieren der Kindersicherung, Sicherungsoptionen usw. Zum Anfordern und Analysieren von Parametern wird eine API bereitgestellt
Die UID/GID-Zuweisung und -Verarbeitung erfolgt dynamisch auf jedem lokalen System, mit dem das Home-Verzeichnis verbunden ist. Mit dem vorgeschlagenen System kann der Benutzer sein Home-Verzeichnis beispielsweise auf einem Flash-Laufwerk bei sich behalten und auf jedem Computer eine Arbeitsumgebung erhalten, ohne explizit ein Konto darauf zu erstellen (das Vorhandensein einer Datei mit dem Abbild des Home-Verzeichnisses). führt zur Synthese des Benutzers).
Es wird vorgeschlagen, das LUKS2-Subsystem für die Datenverschlüsselung zu verwenden, systemd-homed ermöglicht jedoch auch die Verwendung anderer Backends, beispielsweise für unverschlüsselte Verzeichnisse, Btrfs-, Fscrypt- und CIFS-Netzwerkpartitionen. Zur Verwaltung tragbarer Verzeichnisse wird das Dienstprogramm homectl vorgeschlagen, mit dem Sie Bilder von Home-Verzeichnissen erstellen und aktivieren sowie deren Größe ändern und ein Kennwort festlegen können.
Auf Systemebene wird die Arbeit durch folgende Komponenten sichergestellt:
- systemd-homed.service – verwaltet das Home-Verzeichnis und bettet JSON-Datensätze direkt in Home-Verzeichnisbilder ein;
- pam_systemd – verarbeitet Parameter aus dem JSON-Profil, wenn sich der Benutzer anmeldet, und wendet sie im Kontext der aktivierten Sitzung an (führt Authentifizierung durch, konfiguriert Umgebungsvariablen usw.);
- systemd-logind.service – verarbeitet Parameter aus dem JSON-Profil, wenn sich der Benutzer anmeldet, wendet verschiedene Einstellungen für die Ressourcenverwaltung an und legt Grenzwerte fest;
- nss-systemd – NSS-Modul für glibc, synthetisiert klassische NSS-Datensätze basierend auf einem JSON-Profil und bietet Abwärtskompatibilität mit der UNIX-Benutzerverarbeitungs-API (/etc/password);
- PID 1 – erstellt dynamisch Benutzer (analog zur Verwendung der DynamicUser-Direktive in Einheiten synthetisiert) und macht sie für den Rest des Systems sichtbar;
- systemd-userdbd.service – übersetzt UNIX/glibc-NSS-Konten in JSON-Datensätze und stellt eine einheitliche Varlink-API zum Abfragen und Durchlaufen von Datensätzen bereit.
Zu den Vorteilen des vorgeschlagenen Systems gehören die Möglichkeit, Benutzer beim Mounten des Verzeichnisses /etc im schreibgeschützten Modus zu verwalten, das Fehlen der Notwendigkeit, Kennungen (UID/GID) zwischen Systemen zu synchronisieren, die Unabhängigkeit des Benutzers von einem bestimmten Computer und das Blockieren von Benutzerdaten im Schlafmodus die Verwendung von Verschlüsselung und modernen Authentifizierungsmethoden. Systemd-homed soll in Release 244 oder 245 in Systemd Mainstream aufgenommen werden.
Beispiel für ein JSON-Benutzerprofil:
„autoLogin“: wahr,
"verbindlich" : {
«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»,
„Speicher“: „luks“,
„uid“: 60233
}
},
„Disposition“: „regelmäßig“,
„enforcePasswordPolicy“: false,
„lastChangeUSec“: 1565951024279735,
"Mitglied von" : [
"Rad"
],
"privilegiert" : {
„hashedPassword“: [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
"Unterschrift" : [
{
"data" : "LU/HeVrPZSzi3M3J...==",
„key“: „——BEGIN PUBLIC KEY——\nMCowBQADK2VwAy…=\n——END PUBLIC KEY——\n“
}
],
„Benutzername“: „Test“,
"Status" : {
«15e19cf24e004b949dfaac60c74aa165» : {
„goodAuthenticationCounter“: 16,
„lastGoodAuthenticationUSec“: 1566309343044322,
„rateLimitBeginUSec“: 1566309342341723,
„rateLimitCount“ : 1,
„state“: „inaktiv“,
„service“: „io.systemd.Home“,
„diskSize“: 161218667776,
„diskCeiling“: 191371729408,
„diskFloor“: 5242780,
„signedLocally“: wahr
}
}
Source: opennet.ru