Представлен systemd-homed для управления переносимыми домашними каталогами
21 сентября 2019 года
Леннарт Поттеринг (Lennart Poettering) представил (Архивная копия от 21 сентября 2019 на Wayback Machine) ( 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 } }
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.