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

28 ноября 2020 года

После четырёх месяцев разработки представлен релиз системного менеджера systemd 247. В новом выпуске добавлен экспериментальный обработчик нехватки памяти, проведено нарушающее совместимость обновление правил udev, в systemd-homed по умолчанию задействована ФС Btrfs, предложен механизм для безопасной передачи конфиденциальных данных в сервисы, стабилизирована утилита systemd-dissect.

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

  • В правила udev внесены нарушающие обратную совместимость изменения, необходимые для корректной реализации в udev uevent-событий "bind" и "unbind", внесённых в модель устройств ядра Linux 4.14 и обычно генерируемых для USB-устройств и устройств для которых необходимо до начала работы загрузить прошивку. Для использования нового systemd-udevd дистрибутивам потребуется обновить правила udev, заменив вызовы 'ACTION!="add|change",GOTO="xyz_end"' на 'ACTION=="remove",GOTO="xyz_end"'. Помимо изменения поставляемых в разных пакетов правил udev, изменения также необходимо будет внести в различные программы мониторинга, библиотеки и утилиты, работающие с правилами udev.

Утверждается, что необходимость подобного изменения обусловлена не проблемами в systemd или udev, а нарушающим совместимость изменением в ядре Linux, которое привело к тому, что всё больше и больше драйверов используют события "bind" и "unbind", для поддержки которых требуется кардинальное изменение логики обработки событий. В качестве решения в systemd-udevd полностью переработана концепция тегов, позволяющих помечать и фильтровать устройства в процессе их отслеживания. Теги udev теперь жёстко привязываются к устройству и не могут быть удалены до того, как само устройство будет удалено. Такая мера гарантирует, что приложения смогут получить uevent для тегов, после применения вызова "unbind", так как тег теперь связывается не с событием устройства, а с самим устройством, и не меняется после нового события.

  • Добавлена экспериментальная поддержка раннего реагирования на нехватку памяти в системе (systemd-oomd), реализованная на базе обработчика oomd, который развивает компания Facebook. Oomd использует подсистему ядра PSI (Pressure Stall Information), позволяющую в пространстве пользователя проанализировать информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для точной оценки уровня загруженности системы и характера замедления работы.

PSI позволяет выявить начало возникновения задержек из-за нехватки ресурсов и выборочно завершить работу ресурсоёмких процессов на стадии, когда система ещё не находится в критическом состоянии и не начинает интенсивно урезать кэш и вытеснять данные в раздел подкачки. Для управления предложена утилита oomctl. В unit-ах, допускающих ограничение ресурсов (.service, .mount, .swap, .slice, .socket и .slice), реализованы настройки ManagedOOMSwap, ManagedOOMMemoryPressure и ManagedOOMMemoryPressureLimitPercent.

  • В системных сервисах предложена (задействована в systemd-nspawn) новая логика безопасной передачи конфиденциальных данных, таких как пароли и ключи шифрования, а также сопутствующей информации, например, имён пользователей и сертификатов. Для организации передачи данных предложено два параметра SetCredential и LoadCredential, а сами учётные данные передаются через промежуточные файлы в отбельном каталоге, определяемом через переменную окружения $CREDENTIALS_DIRECTORY.
  • При создании домашних каталогов в разделах LUKS при помощи сервиса systemd-homed, обеспечивающий управление переносимыми домашними каталогами, по умолчанию теперь используется файловая система Btrfs. Для изменения типа ФС можно воспользоваться параметром DefaultFileSystemType в homed.conf. Отмечается, что в отличие от ext4 и xfs, применение Btrfs позволяет не только увеличивать, но и уменьшать размер примонтированного раздела.
  • В JSON-профили пользователей systemd-homed добавлена поддержка ключей восстановления, включающих автоматически сгенерированные запасные парольные фразы для разблокировки учётной записи или домашнего каталога, на случай потери токена FIDO2 или PKCS#11. Для прикрепления ключа восстановления к учётной записи предложена опция "--recovery-key", а сам ключ отображается в форме QR-кода для его сканирования и сохранения в надёжном месте.
  • Для каждого шифрованного каталога LUKS в systemd-homed реализована обработка флага "dirty", который сигнализирует, что каталог не был отключён должным образом, т.е. перед отключением не была запущена чистка освобождённых блоков.
  • Стабилизирован и размещён в /usr/bin инструмент systemd-dissect, выполняющий работу по разбору дисковых образов в соответствии с Bootable Partition Specification, по аналогии с systemd-nspawn. systemd-dissect может применяться для монтирования в локальную директорию дисковых образов со сложной раскладкой разделов (например, включающих разделы LUKS и Verity). В новом выпуске systemd-dissect также предложен новый параметр "--mkdir", который при указании в комбинации с параметром "--mount" позволяет создавать каталоги для монтирования образов, если они не созданы заранее. Также добавлены параметры "--copy-from" и "--copy-to" для копирования файлов и каталогов в образы и из образов без их монтирования. Для вывода отчёта о проверке образа в формате JSON предложена опция "--json".
  • Библиотеки libqrencode, libpcre2, libidn/libidn2, libpwquality и libcryptsetup теперь загружаются динамически с использованием dlopen(), вместо жёсткого указания зависимостей в заголовке ELF.

Изменение позволяет загружать указанные зависимости при необходимости и только если они доступны. Если библиотеки не найдены, привязанная к ним операция не выполняется или вызывается запасной обработчик. Например, для создания урезанных системных образов дистрибутивов можно минимизировать список зависимостей, которые требуются для пакета systemd, переведя дополнительные библиотеки из категории "required" в "recommended".

  • Для сервисов, использующих параметры RootImage и RootDirectory, по умолчанию активирована настройка MountAPIVFS, включающая автоматическое подключение псевдо-ФС /proc/, /sys/ и /dev/.
  • PAM-настройки сервиса "systemd-user" перенесены из /etc/pam.d/ в каталог /usr/lib/pam.d/ (подразумевается, что в /usr/lib/pam.d/ размещены системные PAM-файлы, а /etc/pam.d/ позволяет их переопределить).
  • Для unit-файлов реализована настройка RootImageOptions, позволяющая переопределить параметры монтирования для любых ФС, монтируемых при обработке опции RootImage. Также добавлена настройка MountImages для монтирования дополнительных образов в доступное сервису дерево каталогов.
  • В таймеры добавлена настройка FixedRandomDelay, позволяющая при настройке случайно задержки через RandomizedDelaySec обеспечить стабильность данной задержки на указанной системе (но для разных юнитов задержки будут разными).
  • В сокеты добавлена настройка Timestamping для управления включением параметров SO_TIMESTAMP/SO_TIMESTAMPNS, которая может принимать значения

"us", "ns" и "off".

  • В systemd-repart добавлена возможность генерации вывода в формате JSON (--json).
  • В systemd-tmpfiles добавлена опция "-E" для исключения служебных каталогов (эквивалентна набору "--exclude-prefix=/dev --exclude-prefix=/proc --exclude=/run --exclude=/sys"). Также добавлена опция "--image", которая похожа на "--root", но использует дисковый образ вместо каталога.
  • В journalctl добавлена опция "--image" для обращения к данным с логами в дисковом образе. Обеспечена подсветка вывода в режиме "--output=cat".
  • В systemctl добавлен параметр "--timestamp", который можно использовать для настройки стиля выводимого времени (точность, часовой пояс).
  • В systemd-detect-virt и ConditionVirtualization реализовано определение системы управления контейнерами Pouch и виртуальных машин IBM PowerVM.
  • Systemd-nspawn переведён на использование /run/host/incoming/ для проброса внешних точек монтирования в контейнеры, а также /run/host/notify для определения управляющих сокетов для контейнеров
  • Добавлен новый фильтр системных вызовов "@known", включающий все системные вызовы, известные на момент сборки systemd. Поведение списка "allow" фильтра системных вызовов немного изменено, и по умолчанию теперь допускаются (EPERM) только вызовы "@known", а для остальных выдаётся код ENOSYS. При выполнении команды "systemd-analyze syscall-filter" теперь выводятся две отдельные секции системными вызовами, известными на момент сборки, и системными вызовами, добавленными после. При установке переменной окружения $SYSTEMD_LOG_SECCOMP=1 в systemd-nspawn обеспечено отражение в логе аудита всех нарушений фильтра системных вызовов. Для отключения фильтра системных вызовов предложена переменная окружения $SYSTEMD_SECCOMP=0.
  • Для unit-файлов реализованы настройки ProtectProc и ProcSubset, включающие механизмы защиты procfs (hidepid и subset) для ограничения просмотра в /proc только своих процессов.
  • В сокеты добавлена настройка FlushPending для сброса всех ожидающих соединений после завершения связанного сервиса.
  • В systemd-repart добавлены настройки Format, Encrypt и CopyFiles для форматирования, LUKS-шифрования и заполнения любых новых разделов. В опции "--size" реализовано значение "auto" для автоматического выбора минимально возможного размера образа.
  • В systemd-resolved в дополнение к D-Bus local DNS (127.0.0.53) добавлен ещё один IPC-интерфейс - Varlink, что позволяет определять имена в initrd и на раннем этапе загрузки, когда DBus ещё недоступен. Добавлен параметр DNSStubListenerExtra для указания дополнительных IP для приёма запросов, в дополнение к 127.0.0.53:53.

При обработке запросов через D-Bus и Varlink указание точки после имени хоста теперь воспринимается как отключение проверки с доменом, указанным в параметре "search", т.е. вызов "resolvectl query foo." эквивалентен "resolvectl query --search=off foo.".

  • В systemd-tmpfiles при автоматической чистке старых файлов в /tmp/ и /var/tmp/, помимо atime, mtime и ctime теперь учитывается и btime ("birth time").
  • В systemd-logind добавлена обработка клавиши KEY_RESTART и выполнение перезагрузки при её нажатии, по аналогии с обработкой клавиш EY_POWER, KEY_SUSPEND и KEY_SLEEP. Для переопределения обработчика предложены настройки

HandleRebootKey и RebootKeyIgnoreInhibited.

  • В systemd-nspawn и systemd-machined обеспечена реконструкция жёстких ссылок при копировании содержимого OSTree.
  • В systemd-networkd в файлах .netdev появилась возможность создания туннелей "BareUDP". В файлах .network в параметр Gateway добавлена поддержка спецзначений

"_dhcp4" и "_ipv6ra для настройки дополнительных локально определённых маршрутов к шлюзу при помощи DHCP и IPv6 Router Advertisement. Настройка и секция IPv6PrefixDelegation переименованы в IPv6SendRA.

  • В systemd-shutdown на последней стадии завершения работы реализована попытка отсоединения MD-устройств (программные RAID) по аналогии с отключением блочных устройств loopback и DM, в качестве подстраховки на случай если ранее подсистема хранения корректно их не отключила.
  • Изменена логика вызова обработчиков многостраничного просмотра (autopaging) - при запуске с использованием утилиты "sudo" в less теперь включается режим "secure" ($LESSECURE=1), запрещающий вызов внешних программ.
  • В "systemctl edit" реализован вывод в комментарии оригинального содержимого редактируемого юнита.
  • Юниты в пользовательском режиме разделены на три части: session.slice (юниты базового графического сеанса),

app.slice (обычные пользовательские приложения) и background.slice (низкоприоритетные задачи). В дальнейшем для данных наборов планируется реализовать раздельные ограничения и защиту от исчерпания ресурсов.

  • Добавлена поддержка нового типа GPT-разделов RISCV32/64, который можно использовать для корневого раздела и раздела /usr.

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Выпуск системного менеджера systemd 247», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.