Выпуск системного менеджера systemd 249
8 июля 2021 года
После трёх месяцев разработки представлен релиз системного менеджера 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" для проброса в контейнер учётной записи пользователя, имеющегося в хост-окружении (в контейнер монтируется домашний каталог, добавляется запись пользователя/группы и выполняется маппинг 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", позволяющая управлять появлением символа замка (🔐) в строке ввода пароля.
- Добавлена документация по структуре дерева исходных текстов systemd.
- Для unit-ов добавлено свойство MemoryAvailable, показывающее сколько памяти остаётся у unit-а в запасе до достижения лимита, выставленного через параметры MemoryMax,
MemoryHigh или MemoryAvailable.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.