Прадстаўлены systemd-homed для кіравання пераноснымі хатнімі каталогамі.

Ленарт Потэрынг (Lennart Poettering) прадставіў (PDF) на канферэнцыі All Systems Go 2019 новы кампанент сістэмнага мэнэджара systemd — systemd-homed, накіраваны на забеспячэнне пераноснасці хатніх каталогаў карыстальнікаў і іх аддзялення ад сістэмных налад. Асноўная ідэя праекта ў стварэнні самадастатковых асяродкаў для дадзеных карыстача, якія можна пераносіць паміж рознымі сістэмамі, не клапоцячыся аб сінхранізацыі ідэнтыфікатараў і канфідэнцыяльнасці.

Асяроддзе хатняга каталога пастаўляецца ў форме які манціруецца файла-выявы, дадзеныя ў якім зашыфраваныя. Параметры ўліковых дадзеных карыстальніка прывязаныя да хатняга каталога, а не да сістэмных налад - замест /etc/passwd і /etc/shadow выкарыстоўваецца профіль у фармаце JSON, які захоўваецца ў каталогу ~/.identity. У профілі пазначаны параметры, неабходныя для працы карыстальніка, уключаючы дадзеныя пра імя, хэшэ пароля, ключы для шыфравання, квоты і рэсурсы. Профіль можа быць завераны лічбавым подпісам, якая захоўваецца на вонкавым токене Yubikey.

Параметры таксама могуць уключаць дадатковыя звесткі, такія як ключы для SSH, дадзеныя для біяметрычнай аўтэнтыфікацыі, малюнак, email, адрас, гадзінны пояс, мова, ліміты на лік працэсаў і памяць, дадатковыя сцягі мантавання (nodev, noexec, nosuid), дадзеныя аб ужывальных карыстачом серверах IMAP/SMTP, інфармацыя аб уключэнні бацькоўскага кантролю, параметры рэзервовага капіявання і да т.п. Для запыту і разбору параметраў прадастаўляецца API Varlink.

Прызначэнне і апрацоўка UID/GID вырабляецца дынамічна ў кожнай лакальнай сістэме, да якой падлучаецца хатні каталог. Пры дапамозе прапанаванай сістэмы карыстач можа трымаць свой хатні каталог пры сабе, напрыклад на Flash-назапашвальніку, і атрымліваць працоўнае асяроддзе на любым кампутары без відавочнай установы на ім уліковага запісу (наяўнасць файла з выявай хатняга каталога прыводзіць да сінтэзу карыстача).

Для шыфравання дадзеных прапануецца выкарыстоўваць падсістэму LUKS2, але systemd-homed таксама дазваляе выкарыстоўваць і іншыя бэкэнды, напрыклад, для незашыфраваных каталогаў, Btrfs, Fscrypt і сеткавых частак CIFS. Для кіравання пераноснымі каталогамі прапанавана ўтыліта homectl, якая дазваляе ствараць і актываваць выявы хатніх каталогаў, а таксама змяняць іх памер і задаваць пароль.

На ўзроўні сістэмы праца забяспечваецца наступнымі кампанентамі:

  • systemd-homed.service - кіруе хатнім каталогам і ўбудоўвае JSON-запісы напроста ў выявы хатняга каталога;
  • pam_systemd - апрацоўвае параметры з JSON-профіля пры ўваходзе карыстальніка і ўжывае іх у кантэксце актываванага сеансу (праводзіць аўтэнтыфікацыю, наладжвае зменныя асяроддзі і да т.п.);
  • systemd-logind.service - апрацоўвае параметры з JSON-профіля пры ўваходзе карыстальніка, ужывае розныя налады кіравання рэсурсамі і выстаўляе ліміты;
  • nss-systemd - модуль NSS для glibc, сінтэзуе класічныя запісы NSS на аснове JSON-профіля, падаючы зваротную сумяшчальнасць з UNIX API для апрацоўкі карыстачоў (/etc/password);
  • PID 1 - дынамічна стварае карыстальнікаў (сінтэзуе па аналогіі з ужываннем дырэктывы DynamicUser у unit-ах) і робіць іх бачнымі для астатняй сістэмы;
  • systemd-userdbd.service — транслюе ўліковыя запісы UNIX/glibc NSS у запісе JSON і падае ўніфікаваны API Varlink для запыту і перабору запісаў.

З добрых якасцяў прапанаванай сістэмы адзначаецца магчымасць кіравання карыстачамі пры мантаванні каталога /etc у рэжыме толькі для чытання, адсутнасць неабходнасці сінхранізацыі ідэнтыфікатараў (UID/GID) паміж сістэмамі, незалежнасць карыстача ад пэўнага кампутара, блакіроўка дадзеных карыстача падчас пераходу ў спячы рэжым, ужыванне шыфравання і сучасных метадаў аўтэнтыфікацыі. Systemd-homed плануецца ўключыць у асноўны склад systemd у выпуску 244 ці 245.

Прыклад JSON-профіля карыстальніка:

"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
}
}

Крыніца: opennet.ru

Дадаць каментар