Ленарт Потэрынг (Lennart Poettering)
Асяроддзе хатняга каталога пастаўляецца ў форме які манціруецца файла-выявы, дадзеныя ў якім зашыфраваныя. Параметры ўліковых дадзеных карыстальніка прывязаныя да хатняга каталога, а не да сістэмных налад - замест /etc/passwd і /etc/shadow выкарыстоўваецца
Параметры таксама могуць уключаць дадатковыя звесткі, такія як ключы для SSH, дадзеныя для біяметрычнай аўтэнтыфікацыі, малюнак, email, адрас, гадзінны пояс, мова, ліміты на лік працэсаў і памяць, дадатковыя сцягі мантавання (nodev, noexec, nosuid), дадзеныя аб ужывальных карыстачом серверах IMAP/SMTP, інфармацыя аб уключэнні бацькоўскага кантролю, параметры рэзервовага капіявання і да т.п. Для запыту і разбору параметраў прадастаўляецца API
Прызначэнне і апрацоўка 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