27.09.2020

Выпуск systemd 245 с реализацией переносимых домашних каталогов


После трёх месяцев разработки представлен релиз системного менеджера systemd 245. В новом выпуске в состав добавлены новые компоненты systemd-homed и systemd-repart, включена поддержка переносимых профилей пользователей в формате JSON, обеспечена возможность определения пространств имён в systemd-journald, добавлена поддержка механизма «pidfd». Полностью переделан сайт проекта, на котором собрана большая часть доступной документации и предложен новый логотип.

Основные изменения:

  • Добавлен сервис systemd-homed, обеспечивающий управление переносимыми домашними каталогами, поставляемыми в форме монтируемого файла-образа, данные в котором зашифрованы. Systemd-homed позволяет создавать самодостаточные окружения для данных пользователя, которые можно переносить между разными системами, не заботясь о синхронизации идентификаторов и конфиденциальности. Параметры учётных данных пользователя привязаны к домашнему каталогу, а не к системным настройкам — вместо /etc/passwd, /etc/group и /etc/shadow используется профиль в формате JSON. Подробнее о см. в прошлом анонсе systemd-homed.
  • Добавлен сопутствующий systemd-homed компонент «userdb» («systemd-userdb»), который транслирует учётные записи UNIX/glibc NSS в записи JSON и предоставляет унифицированный API Varlink для запроса и перебора записей. В привязанном к домашнему каталогу профиле JSON указаны параметры, необходимые для работы пользователя, включая данные об имени, хэше пароля, ключах для шифрования, квотах и предоставляемых ресурсах. Профиль может быть заверен цифровой подписью, хранимой на внешнем токене Yubikey. Для управления профилями предложена утилита «userdbctl». Поддержка профилей в формате JSON добавлена в различные компонеты systemd, включая systemd-logind и pam-systemd, позволяющие для пользователей переносимых каталогов организовать аутентификацию, вход, настройку переменных окружения, создание сеанса, установку лимитов и т.п. В дальнейшем ожидается появления возможности генерации JSON профилей фреймворком sssd с хранением настроек пользователей в LDAP.
  • Добавлена новая утилита «systemd-repart», предназначенная для переразбивки таблиц дисковых разделов в формате GPT. Стректура раздеделов определяется в декларативной форме через файлы, описывающие какие разделы должны или могут существовать. При каждой загрузке фактическая таблица разделов сравнивается с этими файлами, после чего добаляются недостающие разделы или, если определённый в настройках относительный или абсолютый размер не совпадает, увеличивается размер существующих. Допускаются только инкрементальные изменения, т.е. удаление и сокращение размера невозжно, разделы могут быть только добавлены и увеличены. Утилита в основно расчитана на запуск из initrd и автоматически опеделяет диск, на котором размещён корневой раздел, что не требует дополнительной конфигурации, кроме файлов с определением изменений.

    На практике systemd-repart может оказаться полезным для образов операционной системы, которые изначально могут поставляться в минимальном виде, а после первой загрузки расширяться до размера имеющегося блочного устройства или дополняться дополнитедльными разделами (например, корневой раздел может расширяться для охвата всего диска или после первой загрузки создаваться раздел подкачки или /home). Другим применением могут стать конфигурации с двумя сменяющими друг друга разделами — изначально может поставляться только первый раздел, а второй создаваться при первой загрузке.

  • Появилась возможность запуска нескольких экземпляров systemd-journald, каждый из которых ведёт логи в своём пространстве имён. Кроме основного systemd-journald.service в каталоге .service предложен шаблон systemd-journald для создания дополнительных экземпляров, привязанных к своим пространствам имён при помощи директивы «LogNamespace». Каждое пространство имён логов обслуживается отдельным фоновым процессом со своим набором настроек и лимитов. Предложенная возможность может оказаться полезной для балансировки нагрузки при большом объёме логов или усиления изоляции приложений. В journalctl добавлена опция «—namespace», ограничивающая запрос только указанным пространством имён.
  • В systemd-udevd и другие компоненты systemd добавлена поддержка механизма назначения альтернативных имён сетевым интерфейсам, позволяющего одновременно применять для одного интерфейса сразу несколько имён (в том числе применять несколько шаблонов udev). Размер имени может достигать 128 символов (ранее имя сетевого интерфейса было ограничено 16 символами). По умолчанию systemd-udevd теперь назначает каждому сетевому интерфейсу все варианты имён, генерируемые поддерживаемыми схемами наименования. Данное поведение можно изменить в через новые настройки AlternativeName и AlternativeNamesPolicy в файлах .link. В systemd-nspawn реализована генерация альтернативных имён с полным именем контейнера для создаваемых на стороне хоста veth-линков.
  • В API sd-event.h добавлена поддержка подсистемы ядра Linux «pidfd» для обработки ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). Все компоненты systemd, за исключением PID 1, переведены на использование pidfds, если данная подсистема поддерживается текущим ядром.
  • В systemd-logind через PolicyKit обеспечена проверка доступа к операции смены виртуального терминала. По умолчанию полномочия на смену активного терминала предуставляются только пользователям, которые хоть один раз инициировали сеанс на локальном виртуальном терминале.

  • Для упрощения создания образов initrd с systemd в обработчике PID 1 обеспечено определение использования в initrd и загрузки initrd.target вместо default.target. При подобном подходе образы initrd и основной системы могут отличаться только наличием файла /etc/initrd-release.
  • Добавлен новый параметр командной строки ядра — «systemd.cpu_affinity», эквивалентный опции CPUAffinity в /etc/systemd/system.conf и позволяющий настроить маску привязки к CPU для PID 1 и других процессов.
  • Обеспечена перезагрузка базы SELinux в случае перезапуска PID 1 через команды, подобные «systemctl daemon-reload».
  • В обработчик PID 1 добавлена настройка «systemd.show-status=error», при установке которой на консоль выводятся только сообщения об ошибках и существенных задержках при загрузке.
  • В systemd-sysusers добавлена поддержка создания пользователей с именем основной группы, отличающейся от имени пользователя.
  • В systemd-growfs (опция монтироваиня x-systemd.growfs в /etc/fstab) появилась поддержка расширения разделов XFS в дополнение к ранее поддерживаемым разделам с Ext4 и Btrfs.
  • В /etc/crypttab добавлена опция x-initrd.attach для определния шифрованного раздела, уже разблокированного на стадии initrd.
  • В systemd-cryptsetup добавлена поддержка (опция pkcs11-uri в /etc/crypttab) разблокировки шифрованных разделов при помощи смарткарт PKCS#11, например, для прикрепления шифрования разделов к брелокам YubiKeys.
  • В /etc/fstab добавлены новые опции монтироваиня «x-systemd.required-by» и «x-systemd.wanted-by» для явной настройки unit-ов, определяющих операции монтирования, вызываемые вместо local-fs.target и remote-fs.target.
  • Добавлена новая опция sandbox-изоляции сервисов — ProtectClock, ограничивающая запись в системные часы (доступ блокируется на уровне /dev/rtc, системных вызовов и разрешений CAP_SYS_TIME/CAP_WAKE_ALARM).
  • В спецификацию Discoverable Partitions и systemd-gpt-auto-generator добавлено определение разделов Discoverable Partitions Specification has been updated to support /var и /var/tmp.
  • В «systemctl list-unit-files» при отображении списка unit-ов появился новый столбец, отражающий состояние включения, предлагаемое в преднастройках производителя для данного типа unit-ов.
  • В «systemctl» добавлена опция «—with-dependencies», при установке которой команды типа «systemctl status» и «systemctl cat» будут выводить не только все соответствующие unit-ы, но и unit-ы от которых они зависят.

  • В systemd-networkd в конфигурации qdisc добавлена возможность настройки параметров TBF (Token Bucket Filter), SFQ (Stochastic Fairness Queuing), CoDel (Controlled-Delay Active Queue Management) и FQ (Fair Queue).
  • В systemd-networkd добавлена поддержка сетевых устройств IFB (Intermediate Functional Block).
  • В systemd-networkd в секции [Route] реализован параметр MultiPathRoute для настройки multi-path маршрутов.
  • В systemd-networkd для клиента DHCPv4 добавлена опция SendDecline, при указании которой после приёма DHCP-ответа с адресом выполняется проверка дублирования адреса и в случае выявления конфликта адресов выданный адрес отклоняется. Для клиента DHCPv4 также добавлена опция RouteMTUBytes, позволяющая определить размер MTU для маршрутов, генерируемых из привязок IP-адресов (leases).
  • Настройка PrefixRoute в секуии «[Address]» файлов «.network» объявдена устаревшей. На смену ей пришла настройка «AddPrefixRoute», имеющая обратный смысл.
  • В файлах .network в настроку Gateway из секции «[Route]» добавлена поддержка нового значения «_dhcp», при установке которого статический маршрут выбирается на основе шлюза, настроенного через DHCP.
  • В файлах .network в секции «[RoutingPolicyRule]» появились настройки User и SuppressPrefixLength для задания маршрутизации от источника (source routing) на основе диапазонов UID и размера префикса.
  • В networkctl в команде «status» обеспечена возможность отображения логов в привязке к каждому сетевому интерфейсу;
  • В systemd-networkd-wait-online добавлена поддержка задания максимального времени ожидания перехода интерфейса в рабочее состояние и ожидания пропадания интерфейса.
  • Прекращена обработка файлов .link и .network с пустой или закомментированной секцией «[Match]».
  • В файлах .link и .network в секции «[Match]» появилась настройка «PermanentMACAddress» для проверки постоянного MAC-адреса устройств в случае использования сгенерированного случайного MAC.
  • Секция «[TrafficControlQueueingDiscipline]» в файлах .network переимнована в «[NetworkEmulator]», а из названий связанных настроек убран префикс «NetworkEmulator».
  • В systemd-resolved для DNS-over-TLS добавлена поддержка проверки SNI.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52496

Добавить комментарий