Представлено 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

Додати коментар або відгук