Lennart Poettering () la conferința All Systems Go 2019, un nou component al managerului de sistem systemd — , care vizează asigurarea portabilității directoarelor de acasă ale utilizatorilor și separarea acestora de setările sistemului. Ideea principală a proiectului este crearea unor medii autoguvernante pentru datele utilizatorului, care pot fi transferate între diferite sisteme, fără a fi nevoie de sincronizarea identificatorilor și confidențialitate.
Mediul directorului de acasă este livrat sub formă de imagine de fișier montabil, iar datele din acesta sunt criptate. Parametrii de acreditive ai utilizatorului sunt legați de directorul de acasă, nu de setările sistemului — în loc de /etc/passwd și /etc/shadow se folosește în format JSON, stocat în directorul ~/identity. În profil sunt specificați parametrii necesari pentru funcționarea utilizatorului, inclusiv date despre nume, hash-ul parolei, cheile pentru criptare, cotele și resursele oferite. Profilul poate fi semnat digital, cu o semnătură stocată pe un token extern Yubikey.
Parametrii pot include, de asemenea, informații suplimentare, cum ar fi cheile pentru SSH, date pentru autentificarea biometrică, imagine, email, adresă, fus orar, limbă, limite de procese și memorie, flaguri suplimentare de montare (nodev, noexec, nosuid), date despre serverele IMAP/SMTP utilizate de utilizator, informații despre activarea controlului parental, parametrii de backup etc. Pentru solicitarea și analiza parametrilor este disponibil un API .
Atribuirea și gestionarea UID/GID se realizează dinamic în fiecare sistem local la care se conectează directorul de acasă. Prin intermediul sistemului propus, utilizatorul își poate păstra directorul de acasă la el, de exemplu, pe un stick USB, și poate obține un mediu de lucru pe orice computer fără a necesita explicit crearea unui cont pe acesta (prezența unui fișier cu imaginea directorului de acasă duce la crearea utilizatorului).
Pentru criptarea datelor se propune utilizarea subsistemului LUKS2, dar systemd-homed permite, de asemenea, utilizarea altor backend-uri, de exemplu pentru directoare necriptate, Btrfs, Fscrypt și partițiile CIFS. Pentru gestionarea directoarelor portabile, se propune utilitarul homectl, care permite crearea și activarea imaginilor directoarelor de acasă, precum și modificarea dimensiunii acestora și stabilirea unei parole.
La nivel de sistem, funcționarea este asigurată de următoarele componente:
- systemd-homed.service — administrează directorul de acasă și încorporează înregistrările JSON direct în imaginile directorului de acasă;
- pam_systemd — procesează parametrii din profilul JSON la autentificarea utilizatorului și le aplică în contextul sesiunii activate (realizează autentificarea, setează variabilele de mediu etc.);
- systemd-logind.service — procesează parametrii din profilul JSON la autentificarea utilizatorului, aplică diverse setări de gestionare a resurselor și stabilește limitele;
- nss-systemd — modul NSS pentru glibc, sintezează înregistrările NSS clasice pe baza profilului JSON, oferind compatibilitate cu API-ul UNIX pentru gestionarea utilizatorilor (/etc/password);
- PID 1 — creează dinamic utilizatori (sintezează prin analogie cu aplicarea directivei DynamicUser în unități) și îi face vizibili pentru restul sistemului;
- systemd-userdbd.service — transpune înregistrările UNIX/glibc NSS în înregistrări JSON și oferă un API unificat Varlink pentru interogare și parcurgere a înregistrărilor.
Printre avantajele sistemului propus se numără posibilitatea de gestionare a utilizatorilor la montarea directorului /etc în modul doar lectura, lipsa necesității de sincronizare a identificatorilor (UID/GID) între sisteme, independența utilizatorului de computerul specific, blocarea datelor utilizatorului în timpul tranziției în modul de repaus, aplicarea criptării și a metodelor moderne de autentificare. Systemd-homed se preconizează a fi inclus în distribuția principală systemd în versiunea 244 sau 245.
Exemplu de profil JSON al utilizatorului:
„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,
}
}
Sursa: opennet.ro
