Einführung von systemd-homed zur Verwaltung tragbarer Home-Verzeichnisse

Lennart Pöttering eingeführt (PDF) auf der All Systems Go 2019-Konferenz eine neue Komponente des Systemmanagers systemd - systemd-homed, mit dem Ziel, die Home-Verzeichnisse der Benutzer portierbar und von den Systemeinstellungen zu trennen. Die Hauptidee des Projekts besteht darin, autarke Umgebungen für Benutzerdaten zu schaffen, die zwischen verschiedenen Systemen übertragen werden können, ohne sich Gedanken über die Synchronisierung von Identifikatoren und die Vertraulichkeit machen zu müssen.

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 Profil im JSON-Format, gespeichert im Verzeichnis ~/.identity. Das Profil enthält die für die Arbeit des Benutzers erforderlichen Parameter, einschließlich Informationen zum Namen, zum Passwort-Hash, zu Verschlüsselungsschlüsseln, zu Kontingenten und zu zugewiesenen Ressourcen. Das Profil kann mit einer digitalen Signatur zertifiziert werden, die auf einem externen Yubikey-Token gespeichert ist.

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 Varlink.

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

Kommentar hinzufügen