Ленарт Потеринг (Lennart Poettering) () на конференцията All Systems Go 2019 нов компонент на системния мениджър systemd — , насочен към предоставяне на преносимост на домашните директории на потребителите и техния отделение от системните настройки. Основната идея на проекта е създаването на самодостатъчни среди за данни на потребителя, които могат да бъдат премествани между различни системи, без да се тревожите за синхронизация на идентификаторите и конфиденциалността.
Средата на домашната директория се предлага под формата на монтиран файл-образ, данните в който са криптирани. Параметрите на потребителските удостоверения са свързани с домашната директория, а не със системните настройки — вместо /etc/passwd и /etc/shadow се използва в JSON формат, съхраняван в директорията ~/ .identity. В профила са посочени необходимите параметри за работа на потребителя, включително данни за име, хеш на паролата, ключове за криптиране, квоти и предоставените ресурси. Профилът може да бъде заверен с цифров подпис, съхраняван на външен токен Yubikey.
Параметрите могат също да включват допълнителна информация, като ключове за SSH, данни за биометрична автентикация, изображение, имейл, адрес, часова зона, език, лимити на процесите и паметта, допълнителни флагове за монтиране (nodev, noexec, nosuid), информация за прилаганите от потребителя IMAP/SMTP сървъри, данни за активиране на родителски контрол, параметри за резервно копиране и др. За запитване и анализ на параметрите се предоставя API .
Назначаването и обработката на UID/GID се извършва динамично в всяка локална система, към която се свързва домашната директория. С предложената система потребителят може да държи своята домашна директория при себе си, например на USB флаш устройство, и да получава работна среда на всеки компютър без явното създаване на акаунт (наличието на файл с образа на домашната директория води до синтез на потребителя).
За криптиране на данни се предлага да се използва подсистемата 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
