Выпуск системного менеджера systemd 249

После трёх месяцев разработки представлен релиз системного менеджера systemd 249. В новом выпуске обеспечена возможность определения пользователей/групп в формате JSON, стабилизирован протокол Journal, упрощена организация загрузки сменяющих друг-друга дисковых разделов, добавлена возможность привязки BPF-программ к сервисам, реализована большая порция новых сетевых настроек и возможностей для запуска контейнеров.

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

  • Документирован протокол Journal, который можно использовать в клиентах вместо протокола syslog для локальной доставки лог-записей. Протокол Journal реализован достаточно давно и уже используется в некоторых клиентских библиотеках, тем не менее его официальная поддержка заявлена только сейчас.

  • В userdb и nss-systemd обеспечено чтение дополнительных определений пользователей, размещённых в каталогах /etc/userdb/, /run/userdb/, /run/host/userdb/ и /usr/lib/userdb/, заданных в формате JSON. Отмечается, что указанная возможность предоставит дополнительный механизм создания пользователей в системе, обеспечив для него полную интеграцию с NSS и /etc/shadow. Поддержка формата JSON для записей пользователей/групп также позволит прикреплять к пользователям различные параметры управления ресурсами и другие настройки, которые распознают pam_systemd и systemd-logind.
  • В nss-systemd обеспечен синтез записей пользователя/группы в /etc/shadow с использованием хэшированных паролей из systemd-homed.

  • Реализован механизм, упрощающий организацию обновления с использованием заменяющих друг-друга дисковых разделов (один раздел активный, а второй запасной — обновление копируется на запасной раздел, после чего он становится активным). Если в дисковом образе присутствует два корневых или /usr раздела, а udev не определил наличие параметра 'root=' или выполняется обработка дисковых образов, указанных через опцию »--image» в утилитах systemd-nspawn и systemd-dissect, раздел для загрузки может быть вычислен через сравнение меток GPT (подразумевается, что в метке GPT упоминается номер версии содержимого раздела и systemd выберет раздел с более свежими изменениями).

  • В файлы сервисов добавлена настройка BPFProgram, при помощи которой можно организовать загрузку BPF-программ в ядро и управления ими c привязкой к определённым сервисам systemd.

  • В systemd-fstab-generator и systemd-repart добавлена возможность загрузки с дисков, на которых имеется только раздел /usr и нет корневого раздела (подразумевается, что корневой раздел может быть добавлен утилитой systemd-repart во время первой загрузки).

  • В systemd-nspawn опция »--private-user-chown» заменена на более универсальный вариант »--private-user-ownership», который может принимать значения «chown» как эквивалент »--private-user-chown», «off» для отключения старой настройки, «map» для маппинга идентификаторов пользователей в примонтированных файловых системах и «auto» для выбора «map» при наличии необходимой функциональности в ядре (5.12+) или отката на рекурсивный вызов «chown» в противном случае. При помощи маппинга можно сопоставить файлы одного пользователя на примонтированном чужом разделе с другим пользователем в текущей системе, что позволяет упростить совместное использование файлов разными пользователями. В механизме переносимых домашних каталогов systemd-homed маппинг позволит пользователям перемещать свои домашние каталоги на внешние носители и использовать их на разных компьютерах, раскладка идентификаторов пользователей на которых не совпадает.

  • В systemd-nspawn в опции »--private-user» теперь можно использовать значение «identity» для прямого отражения идентификаторов пользователей при настройке пространства имён идентификаторов пользователей (user namespace), т.е. UID 0 и UID 1 в контейнере будут отражены в UID 0 и UID 1 на стороне хоста, для сокращения векторов для атаки (контейнер получит возможности процесса только в своём пространстве имён).

  • В systemd-nspawn добавлена опция »--bind-user» для проброса в контейнер учётной записи пользователя, имеющегося в хост-окружении (в контейнер монтируется домашний каталог, добавляется запись пользователя/группы в /run/host/userdb/ и выполняется маппинг UID внутри контейнера с UID на стороне хост-окружения).




  • В systemd-ask-password и systemd-sysusers добавлена поддержка запроса устанавливаемых паролей (passwd.hashed-password.‹user› и passwd.plaintext-password.‹user›) при помощи появившегося в выпуске systemd 247 механизма безопасной передачи конфиденциальных данных с использованием промежуточных файлов в отдельном каталоге. По умолчанию учётные данные принимаются от процесса с PID1, который получает их, например, от менеджера управления контейнерами, что позволяет организовать настройку пароля пользователя при первой загрузке.

  • В systemd-firstboot добавлена поддержка использования механизма безопасной передачи конфиденциальных данных для запроса различных параметров системы, что может применяться для инициализации системных настроек при первой загрузке образа контейнера, в котором нет необходимых настроек в каталоге /etc.

  • В процессе PID 1 в процессе загрузки обеспечен показ одновременно имени и описания юнита. Изменить вывод можно через параметр «StatusUnitFormat=combined» в system.conf или опцию командной строки ядра «systemd.status-unit-format=combined»

  • В утилиты systemd-machine-id-setup и systemd-repart добавлена опция »--image» для передачи файла с идентификатором машины в дисковых образ или для увеличения размера дискового образа.

  • В файл настройки разделов, используемый утилитой systemd-repart, добавлен параметр MakeDirectories, который можно использовать для создания произвольных каталогов в создаваемой файловой системе, на этапе до отражения в таблице разделов (например, для создания в корневом разделе каталогов для точек монтирования для того, чтобы иметь возможность сразу примонтировать раздел в режиме только для чтения). Для управления GPT-флагами на создаваемых разделах добавлены соответствующие параметры Flags, ReadOnly и NoAuto. В параметре CopyBlocks реализовано значение «auto» для автоматического выбора текущего загрузочного раздела в качестве источника при копировании блоков (например, когда необходимо перенести собственный корневой раздел на новый носитель).

  • В GPT реализован флаг «grow-file-system», аналогичный опции монтирования x-systemd.growfs и обеспечивающий автоматическое расширение размера ФС до границ блочного устройства, если размер ФС меньше раздела. Флаг применим к ФС Ext3, XFS и Btrfs, и может применяться к автоматически определяемым разделам. Флаг по умолчанию включается для доступных на запись разделов, автоматически создаваемых через systemd-repart. В для настройки флага в systemd-repart добавлена опция GrowFileSystem.

  • В файле /etc/os-release реализована поддержка новых переменных IMAGE_VERSION и IMAGE_ID для определения версии и идентификатора атомарно обновляемых образов. Для подстановки указанных значений в различные команды предложены спецификаторы %M и %A.

  • В утилиту portablectl добавлен параметр »--extension» для активации переносимых образов расширения системы (например, через них можно распространять образы с дополнительными сервисами, интегрируемыми в корневой раздел).

  • В утилите systemd-coredump обеспечено извлечение ELF-информации build-id при формировании core-дампа процесса, что может оказаться полезным для определения к какому пакету относится сбойный процесс, если информация об имени и версии deb- или rpm-пакетов была встроена в ELF-файлы.

  • В udev добавлена новая база оборудования для устройств FireWire (IEEE 1394).

  • В udev в схему выбора имён сетевых интерфейсов «net_id» добавлены три изменения, нарушающие обратную совместимость: некорректные символы в именах интерфейсов теперь заменяются на »_»; имена слотов PCI hotplug для систем s390 обрабатываются в форме шестнадцатеричных чисел; разрешено использование до 65535 встроенных PCI-устройств (ранее номера выше 16383 блокировались).

  • В systemd-resolved в список NTA (Negative Trust Anchors) добавлен домен «home.arpa», рекомендованный для локальных домашних сетей, но не применяемый в DNSSEC.

  • В параметре CPUAffinity обеспечен разбор спецификаторов »%».

  • В файлы ».network» добавлен параметр ManageForeignRoutingPolicyRules, который можно использовать для исключения обработки в systemd-networkd сторонних политик маршрутизации.

  • В файлы ».network» добавлен параметр RequiredFamilyForOnline для определения наличия IPv4 или IPv6 адреса как признака нахождения сетевого интерфейса в состоянии «online». В networkctl обеспечено отображение состояния «online» для каждого линка.

  • В файлы ».network» добавлен параметр OutgoingInterface для определения исходящих интерфейсов при настройке сетевых мостов.

  • В файлы ».network» добавлен параметр Group, позволяющий настроить группу Multipath для записей в секции »[NextHop]».

  • В systemd-network-wait-online добавлены опции »-4» и »-6» для ограничения ожидания соединения только для IPv4 или IPv6.

  • В настройки DHCP-сервера добавлен параметр RelayTarget, переводящий сервер в режим DHCP Ralay. Для дополнительной настройки DHCP-релея предложены опции RelayAgentCircuitId и RelayAgentRemoteId.

  • В DHCP-сервера добавлен параметр ServerAddress, позволяющий явно выставить IP-адрес сервера (иначе адрес выбирается автоматически).

  • В DHCP-сервере реализована секция [DHCPServerStaticLease], позволяющая настроить статические привязки адресов (DHCP leases), указав привязки фиксированных IP к MAC-адресам и наоборот.

  • В настройке RestrictAddressFamilies реализована поддержка значения «none», при указании которого сервису не будут доступны сокеты любого семейства адресов.

  • В файлах ».network» в секциях [Address], [DHCPv6PrefixDelegation] и [IPv6Prefix] реализована поддержка настройки RouteMetric, позволяющей указать метрику для префикса маршрута, созданного для указанного адреса.

  • В nss-myhostname и systemd-resolved обеспечен синтез DNS-записей c адресами для хостов со специальным именем »_outbound», для которых всегда выдаётся локальный IP, в соответствии с маршрутами по умолчанию, используемый для исходящих соединений.

  • В файлы .network в секцию »[DHCPv4]» добавлена активная по умолчанию настройка RoutesToNTP, предписывающая добавление отдельного маршрута через текущий сетевой интерфейс для доступа к адресу NTP-сервера, полученному для этого интерфейса при помощи DHCP (по аналогии с DNS настройка позволяет гарантировать, что трафик к NTP-серверу будет направлен через интерфейс, через который этот адрес был получен).

  • Добавлены настройки SocketBindAllow и SocketBindDeny для управления доступом к сокетам, привязанным к текущему сервису.

  • Для unit-файлов реализована условная настройка ConditionFirmware, позволяющая создавать проверки, оценивающие функции прошивки, такие как работа на системах UEFI и device.tree, а также проверять совместимость с определёнными возможностями device-tree.

  • Реализована опция ConditionOSRelease для проверки полей в файле /etc/os-release. При определении условий проверки значений полей допустимы операторы »=»,»!=»,»‹»,»‹=»,»›=»,»›».

  • В утилите hostnamectl команды вида «get-xyz» и «set-xyz» избавлены от префиксов «get» и «set», например, вместо «hostnamectl get-hostname» и «hostnamectl «set-hostname» можно использовать команду «hostnamectl hostname», присвоение значения в которой определяется указанием дополнительного аргумента («hostnamectl hostname value»). Поддержка старых команд сохранена для обеспечения совместимости.

  • В утилите systemd-detect-virt и настройке ConditionVirtualization обеспечена корректная идентификация окружений Amazon EC2.

  • Настройка LogLevelMax в unit-файла теперь применяется не только к лог-сообщениям, созданным сервисом, но и сообщениям процесса PID 1, в которых упоминается сервис.

  • Предоставлена возможность включения данных SBAT (UEFI Secure Boot Advanced Targeting) в файлы systemd-boot EFI PE.

  • В /etc/crypttab реализована новы опции «headless» и «password-echo — первая позволяет пропустить все операции, связанные с интерактивным запросом паролей и PIN у пользователя, а вторая даёт возможность настроить метод отображения ввода пароля (ничего не показывать, показывать посимвольно и отображать звёздочки). В systemd-ask-password для аналогичных целей добавлена опция »--echo».

  • В systemd-cryptenroll, systemd-cryptsetup и systemd-homed расширена поддержка разблокирования шифрованных разделов LUKS2 при помощи токенов FIDO2. Добавлены новые опции »--fido2-with-user-presence»,»--fido2-with-user-verification» и »--fido2-with-client-pin» для управления проверкой физического присутствия пользователя, верификацией и необходимости ввода PIN-кода.

  • В systemd-journal-gatewayd добавлены опции »--user»,»--system», »--merge» и »--file», аналогичные таким же опциям journalctl.

  • В дополнение к прямым зависимостям между юнитами, задаваемых через параметры OnFailure и Slice, добавлена поддержка неявных обратных зависимостей OnFailureOf и SliceOf, которые могут быть полезны, например, для определения всех unit-ов, входящих в slice.

  • Добавлены новые типы зависимостей между unit-ами: OnSuccess и OnSuccessOf (противоположность OnFailure, вызываемая при удачном завершении); PropagatesStopTo и StopPropagatedFrom (позволяют распространить событие остановки unit-а на другой unit); Upholds и UpheldBy (альтернатива Restart).

  • В утилите systemd-ask-password появилась опция »--emoji», позволяющая управлять появлением символа замка (

    © OpenNet