Zaveden systemd-homed pro správu přenosných domovských adresářů

Lennart Poettering představen (PDF) na konferenci All Systems Go 2019, nová součást správce systému systemd - systemd-homed, jehož cílem je učinit domovské adresáře uživatelů přenosné a oddělené od systémových nastavení. Hlavní myšlenkou projektu je vytvořit soběstačná prostředí pro uživatelská data, která lze přenášet mezi různými systémy bez obav o synchronizaci identifikátorů a důvěrnost.

Prostředí domovského adresáře přichází ve formě souboru připojeného obrazu, jehož data jsou šifrována. Přihlašovací údaje uživatele jsou svázány s domovským adresářem spíše než s nastavením systému - namísto /etc/passwd a /etc/shadow profil ve formátu JSON, uložený v adresáři ~/.identity. Profil obsahuje parametry nezbytné pro práci uživatele, včetně informací o jméně, hash hesla, šifrovacích klíčích, kvótách a přidělených zdrojích. Profil lze certifikovat digitálním podpisem uloženým na externím tokenu Yubikey.

Parametry mohou také zahrnovat další informace, jako jsou klíče SSH, biometrická autentizační data, obrázek, e-mail, adresa, časové pásmo, jazyk, limity procesů a paměti, další příznaky připojení (nodev, noexec, nosuid), informace o používaných uživatelských serverech IMAP/SMTP , informace o povolení rodičovské kontroly, možnosti zálohování atd. K dotazování a analýze parametrů je k dispozici rozhraní API Varlink.

Přiřazení a zpracování UID/GID se provádí dynamicky na každém lokálním systému, ke kterému je domovský adresář připojen. Pomocí navrženého systému si uživatel může ponechat svůj domovský adresář u sebe, například na flash disku, a získat tak pracovní prostředí na libovolném počítači, aniž by si na něm výslovně vytvořil účet (přítomnost souboru s obrázkem domovského adresáře vede k syntéze uživatele).

Pro šifrování dat se navrhuje použít subsystém LUKS2, ale systemd-homed umožňuje použití i jiných backendů, například pro nešifrované adresáře, síťové oddíly Btrfs, Fscrypt a CIFS. Pro správu přenosných adresářů je navržena utilita homectl, která umožňuje vytvářet a aktivovat obrazy domovských adresářů a také měnit jejich velikost a nastavovat heslo.

Na systémové úrovni práci zajišťují následující komponenty:

  • systemd-homed.service - spravuje domovský adresář a vkládá záznamy JSON přímo do obrazů domovského adresáře;
  • pam_systemd - zpracovává parametry z profilu JSON při přihlášení uživatele a aplikuje je v kontextu aktivované relace (provádí autentizaci, konfiguruje proměnné prostředí atd.);
  • systemd-logind.service - zpracovává parametry z profilu JSON 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ě profilu JSON, poskytuje zpětnou kompatibilitu s unixovým uživatelským rozhraním API (/etc/password);
  • PID 1 - dynamicky vytváří uživatele (syntetizováno analogicky s použitím direktivy DynamicUser v jednotkách) a zviditelňuje je pro zbytek systému;
  • systemd-userdbd.service – překládá účty NSS UNIX/glibc do záznamů JSON a poskytuje jednotné rozhraní Varlink API pro dotazování a iteraci záznamů.

Mezi výhody navrženého systému patří možnost správy uživatelů při montáži adresáře /etc v režimu pouze pro čtení, absence nutnosti synchronizace identifikátorů (UID/GID) mezi systémy, nezávislost uživatele na konkrétním počítači, blokování uživatelských dat v režimu spánku, použití šifrování a moderních autentizačních metod. Systemd-homed se plánuje začlenění do hlavního proudu systemd ve verzi 244 nebo 245.

Příklad uživatelského profilu JSON:

"autoLogin" : pravda,
"vazba" : {
«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
}
},
"dispozice" : "normální",
"enforcePasswordPolicy" : nepravda,
"lastChangeUSec" : 1565951024279735,
"člen" : [
"kolo"
],
"privilegovaný" : {
"hashedPassword" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
"podpis": [
{
"data" : "LU/HeVrPZSzi3M3J...==",
"klíč" : "——ZAČÁTEK VEŘEJNÝ KLÍČ——\nMCowBQADK2VwAy…=\n——KONEC VEŘEJNÝ KLÍČ——\n"
}
],
"userName" : "test",
"stav" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec" : 1566309343044322,
"rateLimitBeginUSec" : 1566309342341723,
"rateLimitCount" : 1,
"stav" : "neaktivní",
"service" : "io.systemd.Home",
"velikost disku": 161218667776,
"diskCeiling": 191371729408,
"diskFloor": 5242780,
"signedLocally" : pravda
}
}

Zdroj: opennet.ru

Přidat komentář