Lennart Poettering () na konferenci All Systems Go 2019 byl představen nový komponent systémového správce systemd — , zaměřený na zajištění přenositelnosti domácích adresářů uživatelů a jejich oddělení od systémových nastavení. Hlavním cílem projektu je vytvoření soběstačných prostředí pro uživatelská data, která lze přesouvat mezi různými systémy, aniž by se člověk musel starat o synchronizaci identifikátorů a důvěrnost.
Prostředí domácího adresáře je dodáváno ve formě montovatelného obrazu souboru, jehož data jsou šifrována. Parametry uživatelských přihlašovacích údajů jsou vázány na domácí adresář, nikoli na systémová nastavení — místo /etc/passwd a /etc/shadow se používá ve formátu JSON, uložený v adresáři ~/ .identity. V profilu jsou uvedeny parametry nezbytné pro provoz uživatele, včetně údajů o jménu, hashe hesla, klíčích pro šifrování, kvótách a poskytovaných zdrojích. Profil může být podepsán digitálním podpisem, uloženým na externím tokenu Yubikey.
Parametry mohou také zahrnovat další informace, jako jsou klíče pro SSH, údaje pro biometrickou autentizaci, obrázek, e-mail, adresu, časové pásmo, jazyk, limity na počet procesů a paměť, další parametry montování (nodev, noexec, nosuid), údaje o využívaných IMAP/SMTP serverech, informace o aktivaci rodičovské kontroly, parametry zálohování atd. Pro dotazování a analýzu parametrů je k dispozici API .
Určení a zpracování UID/GID se provádí dynamicky v každém místním systému, ke kterému je domácí adresář připojen. Pomocí navrženého systému si uživatel může uchovat svůj domácí adresář u sebe, například na flash disku, a získat pracovní prostředí na libovolném počítači bez potřeby explicitně na něm zakládat účet (přítomnost souboru s obrazem domácího adresáře vede k syntéze uživatele).
Pro šifrování dat se doporučuje použít subsystém LUKS2, ale systemd-homed také umožňuje používat další backendy, například pro nezašifrované adresáře, Btrfs, Fscrypt a síťové oddíly CIFS. Pro správu přenosných adresářů byla navržena utilita homectl, která umožňuje vytvářet a aktivovat obrazy domácích adresářů, měnit jejich velikost a nastavovat hesla.
Na úrovni systému zajišťují provoz následující komponenty:
- systemd-homed.service — spravuje domovský adresář a integruje JSON záznamy přímo do obrazů domácího adresáře;
- pam_systemd — zpracovává parametry z JSON profilu při přihlášení uživatele a aplikuje je v kontextu aktivované relace (provádí autentizaci, nastavuje proměnné prostředí apod.);
- systemd-logind.service — zpracovává parametry z JSON profilu při přihlášení uživatele, aplikuje různá nastavení správy zdrojů a nastavuje limity;
- nss-systemd — modul NSS pro glibc, syntetizuje klasické záznamy NSS na základě JSON profilu, čímž poskytuje zpětnou kompatibilitu s UNIX API pro zpracování uživatelů (/etc/password);
- PID 1 — dynamicky vytváří uživatele (syntetizuje analogicky k aplikaci direktivy DynamicUser v unit-ách) a činí je viditelnými pro zbytek systému;
- systemd-userdbd.service — převádí uživatelské účty UNIX/glibc NSS na JSON záznamy a poskytuje unifikované API Varlink pro dotazování a procházení záznamů.
Mezi výhody navrhovaného systému patří možnost správy uživatelů při montování adresáře /etc v režimu pouze pro čtení, absence potřeby synchronizace identifikátorů (UID/GID) mezi systémy, nezávislost uživatele na konkrétním počítači, zablokování dat uživatele během přechodu do režimu spánku, aplikace šifrování a moderních metod autentizace. Systemd-homed se plánuje zahrnout do hlavního složení systemd ve verzi 244 nebo 245.
Příklad JSON profilu uživatele:
„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
}
}
Zdroj: opennet.ru
