Выпуск системного менеджера 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