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

После пяти месяцев разработки представлен релиз системного менеджера systemd 243. Из новшеств можно отметить интеграцию в PID 1 обработчика нехватки памяти в системе, поддержку прикрепления собственных BPF-программ для фильтрации трафика unit-ов, многочисленные новые опции для systemd-networkd, режим мониторинга пропускной способности сетевых интерфейсов, задействование по умолчанию на 64-разрядных системах 22-битных номеров PID вместо 16-битных, переход на унифицированную иерархию cgroups, включение в состав systemd-network-generator.

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

  • В обработчик PID 1 добавлено распознавание генерируемых ядром сигналов о нехватке памяти (Out-Of-Memory, OOM) для перевода юнитов, достигших лимита в потреблении памяти, в специальное состояние с опциональной возможностью их принудительного завершения или остановки;
  • Для unit-файлов реализованы новые параметры IPIngressFilterPath и IPEgressFilterPath, позволяющие подключить BPF-программы с произвольными обработчиками для фильтрации входящих и исходящих IP-пакетов, генерируемых процессами, связанными с данным unit-ом. Предложенные возможности позволяют создавать своего рода межсетевые экраны для сервисов systemd. Пример написания простого сетевого фильтра на базе BPF;
  • В утилиту systemctl добавлена команда «clean» для удаления информации о состоянии, кэша, runtime-файлов и каталогов с логами;
  • В systemd-networkd добавлена поддержка сетевых интерфейсов MACsec, nlmon, IPVTAP и Xfrm;
  • В systemd-networkd реализована раздельная настройка стеков DHCPv4 и DHCPv6 через секции »[DHCPv4]» и »[DHCPv6]» в файле конфигурации. Добавлена опция RoutesToDNS для добавления отдельного маршрута к DNS-серверу, указанному в параметрах, полученных от DHCP-сервера (чтобы трафик к DNS отправлялся через тот же линк, что и основной полученный от DHCP маршрут). Для DHCPv4 добавлены новые опции: MaxAttempts — макcимальное число запросов на получение адреса, BlackList — чёрный список DHCP-серверов, SendRelease — включение отправки сообщений DHCP RELEASE при завершении сеанса;
  • В утилиту systemd-analyze добавлены новые команды:
    • «systemd-analyze timestamp» — разбор и преобразование времени;
    • «systemd-analyze timespan» — разбор и преобразование промежутков времени;
    • «systemd-analyze condition» — разбор и тестирование выражений ConditionXYZ;
    • «systemd-analyze exit-status» — разбор и преобразование кодов завершения из номеров в названия и наоборот;
    • «systemd-analyze unit-files» — вывод списка всех файловых путей для юнитов и псевдонимов юнитов.
  • Опции SuccessExitStatus, RestartPreventExitStatus и RestartForceExitStatus теперь поддерживают не только числовые коды возврата, но и их текстовые идентификаторы (например «DATAERR»). Посмотреть список привязки кодов к идентификаторам можно через команду «sytemd-analyze exit-status»;
  • В утилиту networkctl добавлена команда «delete» для удаления виртуальных сетевых устройств, а также опция »--stats» для вывода статистики по устройствам;
  • В networkd.conf добавлены настройки SpeedMeter и SpeedMeterIntervalSec для периодического измерения пропускной способности сетевых интерфейсов. Статистику, полученную по результатам измерений, можно посмотреть в выводе команды 'networkctl status';
  • Добавлена новая утилита systemd-network-generator для генерации файлов .network, .netdev и .link на основе настроек IP, переданных при запуске через командную строку ядра Linux в формате настроек Dracut;
  • Значение sysctl «kernel.pid_max» на 64-разрядных системах теперь выставляется по молчанию в 4194304 (22-битные PID вместо 16-битных), что уменьшает вероятность коллизий при назначении PID, повышает лимит на число одновременно запущенных процессов и положительно отражается на безопасности. Потенциально изменение может привести к проблемам с совместимостью, но на практике о подобных проблемах пока не сообщалось;
  • По умолчанию на этапе сборки осуществлён переход на унифицированную иерархию cgroups-v2 (»-Ddefault-hierarchy=unified»). Ранее по умолчанию выставлялся гибридный режим (»-Ddefault-hierarchy=hybrid»);


  • Изменено поведение фильтра системных вызовов (SystemCallFilter), которые в случае отправки запрещённого системного вызова теперь завершает весь процесс, а не отдельные потоки (thread), так как завершение отдельных потоков могло приводить к непредсказуемым проблемам. Изменений действует только при наличии ядра Linux 4.14+ и libseccomp 2.4.0+;
  • Непривилегированным программам предоставлена возможность отправки пакетов ICMP Echo (ping) благодаря установке sysctl «net.ipv4.ping_group_range» для всего диапазона групп (для всех процессов);
  • Для ускорения процесса сборки по умолчанию прекращена генерации man-руководств (для сборки полной документации нужно использовать опцию »-Dman=true» или »-Dhtml=true» для руководств в формате html). Для упрощения просмотра документации в состав включены два скрипта build/man/man и build/man/html для генерации и предпросмотра интересующих руководств;
  • Для обработки доменных имён с символами национальных алфавитов по умолчанию задействована библиотека libidn2 (для возвращения libidn следует использовать опцию »-Dlibidn=true»);
  • Прекращена поддержка исполняемого файла /usr/sbin/halt.local, предоставляющий функциональность, не получившую должного распространения в дистрибутивах. Для организации запуска команд при завершении работы рекомендовано использовать скрипты в /usr/lib/systemd/system-shutdown/ или определить новый unit, зависимый от final.target;
  • На последней стадии завершения работы systemd теперь автоматически увеличивает уровень логов в sysctl «kernel.printk», что решает проблему с отображением в логе событий, наступивших на поздних стадиях завершения работы, когда штатные демоны ведения логов уже завершены;
  • В journalctl и других отображающих логи утилитах обеспечена подсветка предупреждений жёлтым цветом, а записей аудита синим для их визуального выделения из общей массы;
  • В переменной окружения $PATH путь к bin/ теперь следует раньше пути к sbin/, т.е. при наличии одинаковых имён исполняемых файлов в обеих каталогах, будет выполнен файл из bin/;
  • В systemd-logind обеспечен вызов SetBrightness () для безопасного изменения яркости экрана для каждого сеанса;
  • В команду «udevadm info» добавлен флаг »--wait-for-initialization» для ожидания завершения инициализации устройства;
  • В процессе загрузки системы обработчик PID 1 теперь выводит на экран названия юнитов, вместо строки с их описанием. Для возвращения прошлого поведения можно использовать опцию StatusUnitFormat в /etc/systemd/system.conf или параметр ядра systemd.status_unit_format;
  • В /etc/systemd/system.conf для watchdog в PID 1 добавлена опция KExecWatchdogSec, определяющая таймаут для перезапуска с использованием kexec. Старая настройка ShutdownWatchdogSec переименована в RebootWatchdogSec и определяет таймаут для работ в процессе завершения работы или обычного перезапуска;
  • Для сервисов добавлена новая опция ExecCondition, позволяющая задать команды, которые будут выполнены до ExecStartPre. На основе возвращённого командой кода ошибки принимается решение о дальнейшем выполнении юнита — если возвращён код 0 запуск юнита продолжается, если с 1 до 254 молча завершается без пометки возникновения сбоя, если 255 — завершение с пометкой возникновения сбоя;
  • Добавлен новый сервис systemd-pstore.service для извлечения данных изsys/fs/pstore/ и из сохранения в /var/lib/pstore для дальнейшего анализа;
  • В утилиту timedatectl добавлены новые команды для настойки параметров NTP для systemd-timesyncd в привязке к сетевым интерфейсам;
  • В команде «localectl list-locales» прекращён показ локалей, отличных от UTF-8;
  • Обеспечено игнорирование ошибок присвоения переменных в файлах sysctl.d/, если имя переменно начинается с символа »-»;
  • Серивим systemd-random-seed.service теперь полностью отвечает за инициализацию пула энтропии генератора псевдослучайных чисел ядра Linux. Сервисы которым требуется корректно инициализированный /dev/urandom должны запускаться после systemd-random-seed.service;
  • В загрузчике systemd-boot обеспечена опциональная возможность поддержания seed-файла со случайно последовательностью в EFI System Partition (ESP);
  • В утилиту bootctl добавлены новые команды «bootctl random-seed» для генерации seed-файла в ESP и «bootctl is-installed» для проверки установки загрузчика systemd-boot. В bootctl также налажен вывод предупреждений некорректной настройке загрузочных записей (например, когда образ ядра удалён, а запись для его загрузки оставлена);
  • Обеспечен автоматический выбор раздела подкачки при переходе системы в спящий режим. Раздел выбирается в зависимости от настроенного для него приоритета, а в случае одинаковых приоритетов — размера свободного пространства;
  • В /etc/crypttab добавлена опция keyfile-timeout для задания времени ожидания устройства с ключом шифрования перед выводом запроса пароля для доступа к шифрованному разделу;
  • Добавлена опция IOWeight для установки веса ввода/вывода для планировщика BFQ;


  • В systemd-resolved реализован строгий ('strict') режим работы для DNS-over-TLS и реализована возможность кэширования только позитивных DNS-ответов («Cache no-negative» в resolved.conf);
  • Для VXLAN в systemd-networkd добавлена опция GenericProtocolExtension для включения расширений протокола VXLAN. Для VXLAN и GENEVE добавлена опция IPDoNotFragment для установки флага запрета фрагментации для исходящих пакетов;
  • В systemd-networkd в секции »[Route]» появилась опция FastOpenNoCookie для включения механизма быстрого открытия TCP-соединений (TFO — TCP Fast Open, RFC 7413) в привязке к отдельным маршрутам, а также опция TTLPropagate для настройки TTL LSP (Label Switched Path). В опции «Type» обеспечена поддержка режимов маршрутизации local, broadcast, anycast, multicast, any и xresolve;
  • В systemd-networkd в секции »[Network]» предложена опция DefaultRouteOnDevice для автоматической настройки маршрута по умолчанию для заданного сетевого устройства;
  • В systemd-networkd для сетевых мостов добавлены опции ProxyARP и ProxyARPWifi для настройки поведения proxy ARP, MulticastRouter для задания параметров маршрутизации в режиме multicast, MulticastIGMPVersion для изменения версии IGMP (Internet Group Management Protocol) для multicast;
  • В systemd-networkd для туннелей FooOverUDP добавлены опции Local, Peer и PeerPort для настройки IP-адресов локальной и удалённой сторон, а также номера сетевого порта. Для туннелей TUN добавлена опция VnetHeader для настройки поддержки GSO (Generic Segment Offload);
  • В systemd-networkd в файлах .network и .link в секции [Match] появилась опция Property, позволяющая определить устройства по специфичным для них свойствам в udev;
  • В systemd-networkd для туннелей добавлена опция AssignToLoopback, управляющая привязкой конца туннеля к loopback устройству «lo»;
  • В systemd-networkd автоматизирована активация IPv6-стека в случае его блокировки через sysctl disable_ipv6 — IPv6 активируется, если для сетевого интерфейса определены настойки IPv6 (статические или DHCPv6), в противном случае уже выставленное значение sysctl не меняется;
  • В файлах .network настройка CriticalConnection заменена на опцию KeepConfiguration, предоставляющую больше средств для определения ситуаций (yes», «static», «dhcp-on-stop», «dhcp») в которых systemd-networkd не должен трогать уже имеющиеся соединения при запуске;
  • Устранена уязвимость CVE-2019–15718, вызванная отсутствием контроля доступа к D-Bus интерфейсу systemd-resolved. Проблема позволяет непривилегированному пользователю выполнить операции, доступные только администраторам, например, можно изменить настройки DNS и направить DNS-запросы на подставной сервер;
  • Устранена уязвимость CVE-2019–9619, связанная с невключением pam_systemd для неинтерактивных сеансов, которая позволяет организовать спуфинг активного сеанса.

© OpenNet