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

Леннарт Поттеринг представил релиз системного менеджера systemd 239. Из новшеств можно отметить реализацию системы переносимых сервисов, изменение наименования виртуальных сетевых интерфейсов, усиление защиты системных сервисов, поддержку DNS-over-TLS, режим suspend-then-hibernate, возможность сохранения дампа памяти при спящем режиме в файлы подкачки.

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

  • Представлена экспериментальная поддержка переносимых сервисов («Portable Services»), позволяющих создавать системные сервисы в виде самодостаточных контейнеров. Переносимый сервис поставляется в виде системного образа, но обрабатывается как обычный сервис. Из достоинств переносимых сервисов отмечается возможность упаковки одного или нескольких приложений, сервисов и связанных с ними зависимостей в отдельный образ, с возможностью запуска компонентов непосредственно внутри сформированного отдельного окружения с применением дополнительной изоляции от остальной системы. Для управления переносимыми сервисами предложена утилита «portablectl» (/usr/lib/systemd/portablectl);
  • В systemd-resolved добавлена поддержка резолвинга доменных имён с использованием механизма DNS-over-TLS, при котором применяется штатный протокол DNS (обычно используется сетевой порт 853), завёрнутый в шифрованный канал связи, организованный при помощи протокола TLS с проверкой валидности хоста через TLS/SSL-сертификаты, заверенные удостоверяющим центром. Для активации DNS-over-TLS следует явно выставить в настройках resolved.conf параметр «DNSOverTLS=opportunistic» (по умолчанию поддержка отключена до внесения оптимизаций, направленных на сокращение задержек из-за дополнительных накладных расходов по установке TLS-сеанса поверх TCP);
  • Реализован режим suspend-then-hibernate, при котором система вначале переходит в ждущий режим, но в случае непробуждения в течение определённого таймаута активируется и уходит в глубокий спящий режим;
  • Обеспечена возможность использования файлов подкачки, а не только разделов подкачки, для сохранения дампа памяти во время перехода в спящий режим;
  • Изменено наименование виртуальных сетевых интерфейсов, созданных с использованием технологий SR-IOV (Single Root Input/Output Virtualization) и NPAR (NIC Partitioning), а также для устройств, PCI-контроллер которых не выставляет номер слота. Имена устройств SR-IOV теперь устанавливаются с учётом имени родительского сетевого интерфейса с добавлением суффикса «vN», где N — номер интерфейса. Все виртуальные устройства NPAR теперь именуются по единой схеме (ранее начиная с 9 устройства назначались имена ethN). Для PCI-устройств без номера слота выбирается имя в соответствии со схемой «net_id», вместо определяемых ядром имён ethN;
  • Все длительно работающие системные сервисы переведены по умолчанию на использование белого списка системных вызовов, т.е. если раньше был определён список блокируемых опасных системных вызовов, а все остальные вызовы были разрешены, то теперь задан список разрешённых вызовов, а все остальные запрещены;
  • В system.conf предложена новая настройка NoNewPrivileges, которая позволяет отключить получение новых привилегий (выставить флаг PR_SET_NO_NEW_PRIVS для PID 1), что не позволяет исполняемым файлам с setuid и выставленными capabilities менять свои привилегии;
  • Вывод systemctl и других утилит теперь включает escape-последовательности, позволяющие отобразить доступные для клика ссылки в разных терминалах (например в выводе «systemctl status» теперь можно кликнуть на имени юнита для вызова программы для его просмотра или редактирования;
  • В файлы ».network» в секцию [Route] добавлены новые опции IPv6MTUBytes и MTUBytes для явного выставления MTU для определённых маршрутов, а также добавлена опция «UserClass» для определения класса пользователя в DHCP, опции Multicast и AllMulticast для выставления для сетевого интерфейса флагов MULTICAST и ALLMULTI, а также новая секция »[CAN]» с настройками CAN-сетей;
  • В файлах ».link» появились опции RxChannels, TxChannels, OtherChannels и CombinedChannels= для определения числа принимающих и передающих каналов;
  • В файлах ».netdev» появилась возможность создания интерфейсов «netdevsim»;
  • В systemd-analyze добавлена новая команда «cat-config» для вывода содержимого любых файлов конфигурации, соответствующих маске. Например, «systemd-analyze cat-config systemd/system.conf» выдаст содержимое всех файлов конфигурации, которые обрабатываются при запуске процесса PID 1. В утилиты, подобные systemd-tmpfiles и systemd-sysusers, добавлена опция »--cat-config», позволяющая просмотреть все настройки, утчённые данными утилитами. Например, «systemd-tmpfiles --cat-config» покажет в одном месте все строки файлов в «tmpfiles.d/»;
  • В systemd-nspawn добавлены опции:»--rlimit» для определения начальных лимитов ресуросов для процессов в контейнере,»--hostname» для переопределния имени хоста контейнера,»--no-new-privileges» для выставления флага PR_SET_NO_NEW_PRIVS (отключение suid и capabilities),»--oom-score-adjust» для корректировки поведения в случае нехватки памяти,»--cpu-affinity» для настройки привязки к ядрам CPU,»--resolv-conf» для управления обработкой /etc/resolv.conf,»--timezone» для управления обработкой /etc/localtime. В systemd-detect-virt добавлена опция »--list» для вывода всех известных виртуальных машин и контейнеров;


  • В systemd-logind.service убраны ограничения для сокетов AF_INET и AF_INET6 (убраны из настройки RestrictAddressFamilies), но данное изменение не повлияет на безопасность так как начиная с выпуска 235 для юнитов также выставляется дублирующая блокировка «IPAddressDeny=any» и изменение поведения может наблюдаться только в случае изменения настроек по умолчанию;
  • При указании нескольких настроек RestrictNamespaces в юните, данные настройки теперь объединяются (ранее действовало только последнее значение RestrictNamespaces);
  • При использовании для сервисных юнитов комбинации настроек OnFailure и Restart, то обработчик сбоя больше не вызывается в случае автоматического перезапуска (ранее такое поведение было определено в документации, но на деле обработчик сбоя вызывался);
  • В systemd-tmpfiles добавлен вывод предупреждения в случае упоминания в файлах «tmpfiles.d/» каталога »/var/run/», вместо которого предлагается использовать каталог »/run»;
  • Команды systemctl disable/unmask/preset/preset-all теперь запрещено использовать с опцией »--runtime», так как результат зачастую был не тем, что ожидал пользователь. При выполнении «systemctl disable/unmask» сейчас возвращается состояние как сеансовых (runtime), так и постоянных настроек, т.е. удаляются символические ссылки, как в каталоге /run, так и в /etc;
  • В sd-boot добавлены новые настройки загрузчика, позволяющие опционально отключить поиск загрузочных разделов Windows и macOS и отображение в загрузочному меню режима reboot-into-firmware. Также можно изменить разрешение экрана при загрузке (например для HiDPI);
  • В systemd-resolved.service и systemd-networkd.service по умолчанию выставлена настройка DynamicUser=yes для работы с использованием динамически генерируемого идентификатора пользователя вместо заранее определённых системных пользователей;
  • Утилита systemd-resolve переименована в resolvectl, а интерфейс приведён в соответствие с другими утилитами *ctl, такими как systemctl и loginctl (для обеспечения обратной совместности утилита systemd-resolve сохранена). Кроме того, в утилиты resolvectl/systemd-resolve добавлены опции для совместимости с утилитой 'resolvconf', предлагаемой в Debian и FreeBSD;
  • В networkd в настройке ClientIdentifier теперь допустимо использовать опцию «duid-only», при которой клиент будет отправлять только идентификатор DUID;
  • В nss-systemd (NSS-модуль для glibc) добавлена поддержка перечисления (enumeration) динамических пользователей и групп (ранее поддерживался только маппинг UID/GID в имена и обратно);
  • В journald в настройке Compress теперь можно задать порог, при превышении которого будет использовано сжатие, а объекты меньше которого сохраняются как есть (ранее порог был жестко выставлен, а 512 байт);
  • Добавлен новый сервис systemd-time-sync-wait.service, который откладывает запуск юнита time-sync.target на этапе загрузки до момента получения данных синхронизации точного времени по сети, что может оказаться полезным для систем без локальных часов;
  • Изменена схема поиска файлов, переопределяющих параметры unit-файлов. Например, если раньше для юнита «foo-bar-baz.service» переопределения проверялись по маске «foo-bar-baz.service.d/*.conf», то теперь проверяются все совпадения до первого дефиса, т.е. подпадают «foo-bar-.service.d/*.conf» и «foo-.service.d/», что позволяет создавать переопределения настроек для типовых групп юнитов;
  • Для юнитов реализованы три новых спецификатора: %T и %V для подстановки каталогов с временными файлами (/tmp и /var/tmp) и %E для каталога с настройками (/etc для системных юнитов или $XDG_CONFIG_HOME для пользовательских юнитов);
  • В ExecStart теперь допускается использование относительных путей к исполняемым файлам (список путей в $PATH можно узнать через «systemd-path search-binaries-default»);
  • Добавлено новое состояние загрузки юнитов — «bad-setting», выставляемого если юнит был загружен, но содержит мешающие запуску ошибки (например, отсутствуют настройки ExecStart и ExecStop);
  • В coredumpctl команда «gdb» переименована в «debug» для абстрагирования от типа отладчика (напирмер, может быть использован lldb). Для выбора альтернативного отладчика добавлена опция »--debugger» и переменная окружения $SYSTEMD_DEBUGGER;
  • В timedatectl добавлена новая команда «show» для отображения свойств шины systemd-timedated, а также «timesync-status» для текущего состояния синхронизации времени по NTP и «show-timesync» для показа свойств шины systemd-timesyncd. В systemd-timedated добавлена обработка переменной окружения $SYSTEMD_TIMEDATED_NTP_SERVICES, в которой можно указать список имён юнитов NTP-клиентов;
  • В journalctl и systemctl добавлена опция »-o», при указании которой в каждой строке лога отображаются имена юнитов вместо тегов syslog, а даты указываются с учётом часового пояса;
  • Добавлен новый юнит «system-update-pre.target», определяющий предварительные действия по синхронизации перед установкой системных обновлений в offline-режиме
  • В исполняемый файл systemd добавлена опция »--dump-bus-properties» для вывода всех свойств D-Bus;
  • Для юнитов добавлена настройка «PrivateMounts», при выставлении которой юнит запускается в отдельном собственном пространстве имён в файловой системе;
  • В настройку ConditionSecurity добавлен параметр «uefi-secureboot», который выставляется в значение «true» в случае загрузки в режиме UEFI Secure boot;
  • По умолчанию отключен sysctl «net.ipv4.tcp_ecn»;
  • Добавлены новые документы CGROUP_DELEGATION.md, PORTABLE_SERVICES.md, CODE_QUALITY.md и BOOT_LOADER_SPECIFICATION.md.

© OpenNet