Выпуск системного менеджера systemd 239
22 июня 2018 года
Леннарт Поттеринг представил релиз системного менеджера systemd 239. Из новшеств можно отметить концепцию переносимых сервисов, изменение наименования виртуальных сетевых интерфейсов, усиление защиты системных сервисов, поддержку DNS-over-TLS, режим suspend-then-hibernate, возможность сохранения дампа памяти при спящем режиме в файлы подкачки.
Основные изменения:
- Представлена экспериментальная поддержка переносимых сервисов ("Portable Services"), позволяющих создавать системные сервисы в виде самодостаточных контейнеров. Переносимый сервис поставляется в виде системного образа, но обрабатывается как обычный сервис. Из достоинств переносимых сервисов отмечается возможность упаковки одного или нескольких приложений, сервисов и связанных с ними зависимостей в отдельный образ, с возможностью запуска компонентов с применением дополнительной sandbox-изоляции.
При этом, в отличие от контейнеров переносимые сервисы не запускаются в отдельном изолированном окружении со своим PID 1, а представляют из себя часть системы (выполняются в текущем системном окружении), отделённую в независимую самодостаточную иерархию каталогов. Для управления переносимыми сервисами предложена утилита "portablectl" (/usr/lib/systemd/portablectl). Для создания образов можно применять любые инструменты для формирования начинки контейнеров, такие как "dnf --installroot", "debootstrap" и " mkosi";
- В 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" для вывода всех известных виртуальных машин и контейнеров;
- Изменена схема поиска файлов, переопределяющих параметры unit-файлов. Например, если раньше для юнита "foo-bar-baz.service" переопределения проверялись по маске "foo-bar-baz.service.d/*.conf", то теперь проверяются все совпадения до первого дефиса, т.е. подпадают "foo-bar-.service.d/*.conf" и "foo-.service.d/", что позволяет создавать переопределения настроек для типовых групп юнитов;
- В 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 на этапе загрузки до момента получения данных синхронизации точного времени по сети, что может оказаться полезным для систем без локальных часов;
- Для юнитов реализованы три новых спецификатора: %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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.