systemd system manager έκδοση 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» для проброса в контейнер учётной записи пользователя, имеющегося в хост-окружении (в контейнер монтируется домашний каталог, добавляется запись пользователя/группы и выполняется маппинг 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.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο