Lennart Poettering () pÄ konferensen All Systems Go 2019, en ny komponent av systemhanteraren systemd - , som syftar till att sÀkerstÀlla portabiliteten av anvÀndarnas hemkataloger och deras separation frÄn systeminstÀllningarna. Huvudidén med projektet Àr att skapa sjÀlvförsörjande miljöer för anvÀndardata som kan flyttas mellan olika system utan att behöva oroa sig för synkronisering av identifierare och integritet.
Hemkatalogens miljö levereras i form av en monterbar avbildningsfil, dÀr data Àr krypterade. AnvÀndarens inloggningsuppgifter Àr kopplade till hemkatalogen, istÀllet för till systeminstÀllningarna - istÀllet för /etc/passwd och /etc/shadow anvÀnds i JSON-format, lagrad i katalogen ~/ .identity. Profilen anger de instÀllningar som krÀvs för anvÀndarens funktion, inklusive information om namn, hash av lösenordet, krypteringsnycklar, kvoter och tillhandahÄllna resurser. Profilen kan signeras med en digital signatur lagrad pÄ en extern Yubikey.
InstÀllningarna kan ocksÄ inkludera ytterligare information, sÄsom nycklar för SSH, data för biometrisk autentisering, bild, e-post, adress, tidszon, sprÄk, begrÀnsningar för processer och minne, ytterligare monteringsflaggor (nodev, noexec, nosuid), information om anvÀnda IMAP/SMTP-servrar, information om aktivering av förÀldrakontroll, backup-instÀllningar etc. För att begÀra och bearbeta instÀllningar tillhandahÄlls en API .
Tilldelning och hantering av UID/GID sker dynamiskt i varje lokal system som hemkatalogen ansluter till. Genom det föreslagna systemet kan anvÀndaren ha sin hemkatalog med sig, till exempel pÄ ett USB-minne, och fÄ en arbetsmiljö pÄ vilken dator som helst utan att skapa ett konto (nÀrvaron av en fil med hemkatalogens avbildning leder till syntesen av anvÀndaren).
För datakryptering föreslÄs att anvÀnda LUKS2-systemet, men systemd-homed tillÄter ocksÄ andra backend-alternativ, till exempel för okrypterade kataloger, Btrfs, Fscrypt och nÀtverkspartitioner CIFS. För att hantera portabla kataloger föreslÄs verktyget homectl, vilket tillÄter att skapa och aktivera hemkatalogsbilder samt Àndra deras storlek och stÀlla in lösenord.
PÄ systemnivÄ stöds arbetet av följande komponenter:
- systemd-homed.service â hanterar hemkatalogen och integrerar JSON-poster direkt i hemkatalogsbilderna;
- pam_systemd â bearbetar parametrar frĂ„n JSON-profilen vid anvĂ€ndarinloggning och tillĂ€mpar dem i kontexten av den aktiverade sessionen (genomför autentisering, stĂ€ller in miljövariabler osv.);
- systemd-logind.service â bearbetar parametrar frĂ„n JSON-profilen vid anvĂ€ndarinloggning, tillĂ€mpar olika resurskontrollinstĂ€llningar och sĂ€tter grĂ€nser;
- nss-systemd â NSS-modul för glibc, syntetiserar klassiska NSS-poster baserat pĂ„ JSON-profilen, vilket ger bakĂ„tkompatibilitet med UNIX API för anvĂ€ndarhantering (/etc/password);
- PID 1 â skapar dynamiskt anvĂ€ndare (syntetiserar analogt med anvĂ€ndning av direktivet DynamicUser i enheter) och gör dem synliga för resten av systemet;
- systemd-userdbd.service â översĂ€tter UNIX/glibc NSS-konton till JSON-poster och tillhandahĂ„ller ett enhetligt Varlink API för att begĂ€ra och iterera över poster.
Bland fördelarna med det föreslagna systemet noteras möjligheten att hantera anvÀndare nÀr katalogen /etc Àr monterad i skrivskyddat lÀge, ingen behov av att synkronisera identifierare (UID/GID) mellan system, anvÀndaroberoende frÄn specifika datorer, blockering av anvÀndardata under övergÄng till vilolÀge, tillÀmpning av kryptering och moderna autentiseringsmetoder. Systemd-homed planeras att inkluderas i huvudversionen av systemd i release 244 eller 245.
Exempel pÄ anvÀndarens JSON-profil:
"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
}
}
KĂ€lla: opennet.ru
