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