Въведен systemd-homed за управление на преносими домашни директории

Ленарт Пьотеринг подадено (PDF) на конференцията All Systems Go 2019, нов компонент на системния мениджър systemd - systemd-homed, целящ да направи домашните директории на потребителите преносими и отделни от системните настройки. Основната идея на проекта е да създаде самодостатъчни среди за потребителски данни, които могат да се прехвърлят между различни системи, без да се притеснявате за синхронизирането на идентификаторите и поверителността.

Средата на домашната директория се предлага под формата на монтиран файл с изображение, данните в който са криптирани. Потребителските идентификационни данни са свързани по-скоро с домашната директория, отколкото със системните настройки - вместо /etc/passwd и /etc/shadow профил във формат JSON, съхранен в директорията ~/.identity. Профилът съдържа параметрите, необходими за работата на потребителя, включително информация за името, хеш парола, ключове за криптиране, квоти и разпределени ресурси. Профилът може да бъде удостоверен с цифров подпис, съхранен на външен Yubikey токен.

Параметрите могат също да включват допълнителна информация като SSH ключове, биометрични данни за удостоверяване, изображение, имейл, адрес, часова зона, език, процеси и ограничения на паметта, допълнителни флагове за монтиране (nodev, noexec, nosuid), информация за използваните потребителски IMAP/SMTP сървъри , информация за активиране на родителски контрол, резервни опции и др. Осигурен е API за запитване и анализ на параметри Varlink.

Присвояването и обработката на UID/GID се извършва динамично на всяка локална система, към която е свързана домашната директория. Използвайки предложената система, потребителят може да запази домашната си директория със себе си, например на флаш устройство, и да получи работна среда на всеки компютър, без изрично да създава акаунт на него (наличието на файл с изображение на домашната директория води до синтез на потребителя).

Предлага се да се използва подсистемата 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 в единици) и ги прави видими за останалата част от системата;
  • systemd-userdbd.service - превежда UNIX/glibc NSS акаунти в JSON записи и предоставя унифициран Varlink API за заявки и повторение на записи.

Предимствата на предложената система включват възможността за управление на потребителите при монтиране на директорията /etc в режим само за четене, липсата на необходимост от синхронизиране на идентификатори (UID/GID) между системите, независимост на потребителя от конкретен компютър, блокиране на потребителски данни по време на режим на заспиване, използването на криптиране и съвременни методи за удостоверяване. Планира се Systemd-homed да бъде включен в основния поток на systemd във версия 244 или 245.

Примерен потребителски профил в JSON:

"autoLogin": вярно,
"обвързване": {
«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»,
"съхранение": "лукс",
"uid": 60233
}
},
"disposition" : "редовен",
"enforcePasswordPolicy": невярно,
"lastChangeUSec": 1565951024279735,
"memberOf" : [
"колело"
],
"привилегирован": {
"хеширана парола" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]},
"подпис" : [
{
"данни": "LU/HeVrPZSzi3M3J...==",
"key" : "——НАЧАЛО НА ПУБЛИЧЕН КЛЮЧ——\nMCowBQADK2VwAy…=\n——КРАЙ НА ПУБЛИЧЕН КЛЮЧ——\n"
}
],
"потребителско име": "тест",
"статус": {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec": 1566309342341723,
"rateLimitCount": 1,
"състояние": "неактивно",
"услуга": "io.systemd.Home",
"diskSize": 161218667776,
"diskCeiling": 191371729408,
"diskFloor": 5242780,
"signedLocally": вярно
}
}

Източник: opennet.ru

Добавяне на нов коментар