Выпуск системного менеджера systemd 247
После четырёх месяцев разработки представлен релиз системного менеджера 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.
Источник: http://www.opennet.ru/opennews/art.shtml? num=54155
© OpenNet