Lennart Poettering () på konferencen All Systems Go 2019 præsenteredes en ny komponent af systemadministratoren systemd — , der sigter mod at sikre portabilitet af brugernes hjemmekataloger og deres adskillelse fra systemindstillinger. Hovedideen med projektet er at skabe selvforsynende miljøer for brugerdata, som kan flyttes mellem forskellige systemer uden at skulle bekymre sig om synkronisering af identifikatorer og privatliv.
Hjemmekatalogets miljø leveres i form af et monterbart diskbillede, hvor dataene er krypteret. Brugerens legitimationsoplysninger er knyttet til hjemmekataloget og ikke til systemindstillingerne — i stedet for /etc/passwd og /etc/shadow bruges i JSON-format, gemt i mappen ~/ .identity. Profilen indeholder de nødvendige oplysninger for brugerens funktion, herunder data om navn, passwordhash, krypteringsnøgler, kvoter og tildelte ressourcer. Profilen kan være underskrevet digitalt og opbevares på en ekstern Yubikey-token.
Parametrene kan også inkludere yderligere oplysninger, såsom nøgler til SSH, data til biometrisk autentificering, billede, e-mail, adresse, tidszone, sprog, begrænsninger for antal processer og hukommelse, yderligere monteringsflag (nodev, noexec, nosuid), oplysninger om de IMAP/SMTP-servere, som brugeren anvender, information om aktivering af forældrekontrol, backupindstillinger osv. Der stilles et API til rådighed til forespørgsel og behandling af parametre .
Z mål og behandling af UID/GID udføres dynamisk i hvert lokalt system, som hjemmekataloget forbindes til. Med det foreslåede system kan brugeren opbevare sit hjemmekatalog selv, f.eks. på et USB-drev, og få et arbejds miljø på enhver computer uden at skulle oprette en konto der (tilstedeværelsen af en fil med diskbilledet for hjemmekataloget fører til en syntese af brugeren).
Til datakryptering anbefales det at bruge LUKS2-underinfrastrukturen, men systemd-homed tillader også at bruge andre backends, for eksempel for ukrypterede kataloger, Btrfs, Fscrypt og netværks partitioner CIFS. For at administrere bærbare kataloger er værktøjet homectl foreslået, som giver mulighed for at oprette og aktivere billeder af hjemme kataloger samt ændre deres størrelse og indstille adgangskoder.
På systemniveau sikres driften af følgende komponenter:
- systemd-homed.service - administrerer hjemme kataloget og integrerer JSON-poster direkte i billederne af hjemme kataloget;
- pam_systemd - behandler parametre fra JSON-profilen ved brugerlogin og anvender dem i konteksten af den aktiverede session (udfører autentificering, indstiller miljøvariabler osv.);
- systemd-logind.service - behandler parametre fra JSON-profilen ved brugerlogin, anvender forskellige ressourcestyringsindstillinger og fastsætter grænser;
- nss-systemd - et NSS-modul til glibc, syntetiserer klassiske NSS-poster baseret på JSON-profilen og giver bagudkompatibilitet med UNIX API til brugerbehandling (/etc/password);
- PID 1 - opretter dynamisk brugere (syntetiserer ved hjælp af direktivet DynamicUser i unit'er) og gør dem synlige for resten af systemet;
- systemd-userdbd.service - oversætter UNIX/glibc NSS-konti til JSON-poster og leverer et ensartet Varlink API til forespørgsler og gennemgang af poster.
Blandt fordelene ved det foreslåede system bemærkes muligheden for at administrere brugere ved at montere kataloget /etc i skrivebeskyttet tilstand, fraværet af behovet for at synkronisere identifikatorer (UID/GID) mellem systemer, brugerens uafhængighed af en bestemt computer, låsning af brugerdata under overgang til dvale, anvendelse af kryptering og moderne autentificeringsmetoder. Systemd-homed planlægges at blive inkluderet i den primære sammensætning af systemd i version 244 eller 245.
Eksempel på en JSON-profil for en bruger:
"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——\nMCowBQADK2VwAy…=\n——END PUBLIC KEY——\n»
}
],
«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
}
}
Kilde: opennet.ru
