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