Как известно в большинстве современных дистрибутивов системой GNU/Linux управляет systemd, а вот управление самим systemd до сих пор сводилось к вдумчивому чтению документации и набиванию команд. Олдскульно, но не слишком удобно.
Теперь наконец появился новый, интерактивный способ управления systemd от проекта ISD — Interactive SystemD, публичный релиз 0.2.0 которого состоялся на прошлой неделе.
Фактически это TUI, позволяющий управлять как системным, так и пользовательским экземпляром systemd в интерактивном режиме: просматривать и изменять состояние сервисов, просматривать их логи и т. д.
При этом уже поддерживаются темки — посмотреть демо-ролики можно по ссылке с документацией проекта.
Вышла новая версия свободного системного менеджера systemd.
Нововведения:
Изменения, нарушающие обратную совместимость:
Переработана логика обработки ключа --purge компонента systemd-tmpfiles: теперь удалению подвержены только те пути из tmpfiles.d/, которые помечены флагом $.
Поддержка cgroup v1 по-умолчанию отключена; для того, чтобы принудительно включить ее, нужно передать systemd параметр SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 через командную строку ядра.
Символические ссылки /dev/disk/by-id/nvme-*, для которых не указан NVMe неймспейс, теперь указывают на неймспейс 1; ссылка не будет создана, если неймспейс 1 не существует.
Разработчик Debian Лука Боккассианонсировал переход Debian к использованию tmpfs в /tmp и к очистке /tmp и /var/tmp по таймеру по умолчанию, начиная с Debian 13 “Trixie”.
В новых системах файлы в /tmp будут либо исчезать вместе с прежним экземпляром tmpfs в памяти после рестарта, либо будут удаляться ежедневно по таймеру, если они старше 10 дней, а файлы в /var/tmp будут удаляться только ежедневно по таймеру, если они старше 30 дней. Пакеты openssh и tmux были модифицированы с целью сохранения своих временных файлов в /var/tmp в качестве исключения. В системах, которые будут обновляться до Debian 13 “Trixie”, старое поведение /var/tmp сохранится.
В то время, как в большинстве других дистрибутивов давно перешли на использование tmpfs в /tmp, в Debian не спешили этого делать. Сейчас разработчики Debian (Michael Biebl и Luca Boccassi) возобновили одну из таких дискуссий 2020 года, в которой разработчик из Canonical (Eric Desrochers) пожаловался на проблему несоответствия тогдашней реализации /var/tmp в Debian тому, как работает systemd, несмотря на то, что патч был опубликован ещё в 2012 году. Таким образом, было принято решение привести поведение системы при работе с этими директориями к общепринятому в systemd и в большинстве других дистрибутивов.
Леннарт Поттеринг, главный разработчик systemd, объявил на своём канале Mastodon о своей новой инициативе: команде run0, призванной заменить sudo в деле повышения привилегий пользователя. Планируется, что run0 войдёт в состав systemd 256.
5го марта разработчики postmarketOS, дистрибутива Linux для смартфонов, основанного на Alpine Linux, объявили о добавлении в него поддержки системного менеджера systemd вместо использовавшегося ранее OpenRC.
В OpenSUSE Tumbleweed (пока в качестве опции) вводится поддержка загрузчика systemd-boot как альтернативы GNU GRUB. По официальной версии разработчиков, переход на Systemd-Boot даст возможность повысить скорость загрузки и усилить безопасность загрузочного процесса. Разработчики также ожидают, что переход на systemd-boot даст упрощение и повышение эффективности работы с полнодисковым шифрованием, а также упростит работу со снапшотами в файловой системе Btrfs.
Следует иметь в виду, что systemd-boot не поддерживает Master Boot Record. Если в будущем systemd-boot останется единственным вариантом загрузки, запустить OpenSUSE на старых ПК без эмулятора UEFI, вроде Clover, будет невозможно.
Вышла новая версия свободного системного менеджера systemd.
Изменения, нарушающие обратную совместимость:
Теперь монтирование отдельного раздела /usr/ поддерживается только на этапе initramfs.
Опции SuspendMode=, HibernateState= и HybridSleepState= из секции [Sleep] в systemd-sleep.conf объявлены устаревшими и не оказывают влияния на поведение системы.
В systemctl добавлена новая команда list-paths, которая выводит список всех активных .path юнитов
Механизм soft reboot и команда systemctl soft-reboot. В отличие от обычной перезагрузки, soft reboot перезагружает только userspace. За счет отсутствия необходимости заново инициализировать оборудование и загружать ядро этот механизм позволяет уменьшить время простоя при обновлении
Опция StartupMemoryMax и другие параметры, ограничивающие потребление памяти при инициализации демона
Супервизор теперь может формировать очередь POSIX-сигналов для демона, используя вызов sigqueue()
systemctl поддерживает опцию –when= для команд перезагрузки или выключения (poweroff, halt, reboot, etc). Это позволяет назначить время срабатывания команды в стиле классической команды shutdown.
Новая опция RestartMode, определяющая поведение юнита при аварийном завершении и перезапуске. Если RestartMode=direct, systemd не будет уведомлять зависимые юниты, пока не перезапустит демон, либо не изменит его статус на failed, если все попытки активировать его заново оказались безуспешны
Для .service файлов добавлена логическая опция RootEphemeral. Если RootEphemeral=true, systemd создает временную копию образа диска или системных файлов на корневом разделе. После завершения работы демона эта копия удаляется. По возможности используется рефлинки[Примечание 1] (XFS/btrfs) или снапшоты (btrfs)
Также разработчики предупреждают, что некоторые функции помечены как устаревшие (deprecated) и будут удалены в версии 255 или позже:
Версия 255 не будет поддерживать монтирование раздела /usr на позднем этапе загрузки системы. Рекомендуется монтировать /usr на этапе initramfs
В 2024 году разработчики планируют удалить поддержку cgroups v1
Поддержка скриптов SysVinit будет удалена в следующем релизе
Устаревшей так же помечена переменная SystemdOptions. bootctl systemd-efi-options будет выводить предупреждение
Компания Microsoft объявила о готовности запуска systemd в дистрибутивах для Windows с WSL. Поддержка systemd позволила упростить требования к дистрибутивам и приблизить предоставляемую в WSL среду к обычному оборудованию.
Раньше в WSL использовался предоставляемый Microsoft обработчик инициализации, запускаемый под PID 1 и обеспечивающий настройку инфраструктуры для организации взаимодействия между Linux и Windows. Теперь вместо этого обработчика может использоваться штатный systemd.
Примечание: версия WSL должна быть 0.67.6 или новее.
Леннарт Поттеринг (Lennart Poettering), создавший такие проекты, как Avahi (реализация протокола ZeroConf), звуковой сервер PulseAudio и системный менеджер systemd, уволился из компании Red Hat, в которой работал с 2008 года и руководил разработкой systemd. В качестве нового места работы называется компания Microsoft, деятельность Леннарта в которой также будет связана с разработкой systemd.
Компания Microsoft использует systemd в своём дистрибутиве CBL-Mariner, который развивается в качестве универсальной базовой платформы для Linux-окружений, используемых в облачной инфраструктуре, edge-системах и различных сервисах Microsoft.
Представлен релиз systemd 251 — свободного (GPLv2+) системного менеджера GNU/Linux.
Основные изменения:
повышены требования к окружению (Linux kernel 4.15 c опцией CLOCK_BOOTTIME, С11 с расширениями GNU) - поскольку разработчики systemd тщательно заботятся об обратной совместимости, заголовочные файлы по-прежнему C89
sd-boot сохраняет хэш командной строки ядра по-умолчанию в TPM PCR 12 вместо PCR 8 для улучшения совместимости с Grub, который активно использует данный регистр
в Boot Loader Specification добавлен файл /loader/entries.srel с описанием формата записей в /loader/entries/directory в ESP
юниты, прибитые systemd-oomd, получат соответствующий статус oom-kill
множество Private*= и Protect*= опций теперь доступно и для пользовательского инстанса системного менеджера (при наличии user namespaces в системе)
опция LoadCredential= теперь поддерживает папки /etc/credstore/, /run/credstore/, /usr/lib/credstore/ - см https://systemd.io/CREDENTIALS/
новая команда udevadm lock позволяет получить эксклюзивный доступ к блочному устройству на время выполнения критических операций - см. https://systemd.io/BLOCK_DEVICE_LOCKING/
добавлен юнит systemd-networkd-wait-online@<interface>.service для удобного ожидания появления сети на определённом интерфейсе
новая опция сборки default-user-shell= позволяет задать пользовательскую оболочку в явном виде вместо окаянного bash
Благодаря исследователям безопасности из компании Microsoft, были выявлены две уязвимости CVE-2022-29799 и CVE-2022-29800 в сервисе networkd-dispatcher, в связке позволяющие получить права root. Уязвимости было присвоено кодовое имя Nimbuspwn.
Networkd-dispatcher разрабатывается отдельно от systemd, но применяется во многих дистрибутивах Linux, использующих для настройки параметров сети фоновый процесс systemd-networkd. Связанный с networkd-dispatcher фоновый процесс выполняется с правами root и принимает сигналы о событиях через шину D-Bus. Информация о событиях, связанных с изменением состояния сетевых соединений, отправляется сервисом systemd-networkd. Проблема в том, что непривилегированные пользователи могут сформировать событие о несуществующем состоянии и инициировать запуск своего скрипта, который будет выполнен с правами root.
Кроме того, изучение работы networkd-dispatcher привело к обнаружению ряда других проблем: выход за пределы директории, гонки из-за символических ссылок и из-за модификации данных — все это может быть использовано в злонамеренных целях.
В systemd-tmpfiles выявлена уязвимость, позволяющая вызвать неконтролируемую рекурсию и отказ в обслуживании системы. Для этого во время загрузки необходимо создать в /tmp большое количество вложенных подкаталогов. Исправление в Fedora и RHEL пока на стадии тестирования, в Ubuntu и Suse уязвимость закрыта.
При создании тысяч вложенных каталогов выполнение операции systemd-tmpfiles --remove приводит к аварийному завершению из-за исчерпания стека. Обычно утилита systemd-tmpfiles в одном вызове выполняет операции удаления и создания каталогов (systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev), при этом вначале выполняется удаление, а потом создание, т.е. крах на стадии удаления приведёт к тому, что не будут созданы важные для работы файлы, указанные в /usr/lib/tmpfiles.d/*.conf.
Уязвимость во Flatpak позволяет при загрузке пакета из непроверенного репозитория через манипуляции с метаданными скрыть использование повышенных прав. Еще одна уязвимость без CVE позволяет во время сборки пакета командой flatpak-builder --mirror-screenshots-url создать каталоги в ФС за пределами сборочного каталога.
Вышел Devuan 4.0, форк Debian GNU/Linux, поставляемый без системного менеджера systemd. Пакетная база дистрибутива перешла на ветку Debian 11 Bullseye.
Проектом создано 400 пакетов, которые созданы для работы без systemd, ребрендинга или адаптации к особенностям инфраструктуры Devuan. Два пакета (devuan-baseconf, jenkins-debian-glue-buildenv-devuan) присутствуют только в Devuan и связаны с настройкой репозиториев и работой сборочной системы. В остальном Devuan совместим с Debian, за исключением ПО, требующего Systemd в обязательном порядке, и может использоваться для создания дистрибутивов без systemd. Пакеты Devuan доступны на packages.devuan.org
Рабочий стол по умолчанию — Xfce с дисплейным менеджером Slim. Поддерживается установка KDE, MATE, Cinnamon, LXQT, LXDE. По умолчанию в качестве инициализатора используется Sysvinit, доступны OpenRC и Runit. Предусмотрена возможность отвязки от D-Bus, которая позволяет создавать минималистичные конфигурации рабочего стола на базе оконных менеджеров blackbox, fluxbox, fvwm, fvwm-crystal и openbox. Для настройки сети предлагается вариант конфигуратора NetworkManager, не привязанный к systemd.
Вместо Systemd-udev используется форк eudev из Gentoo. В Xfce и Mate для управление сеансами используется ConsoleKit, в остальных случаях - Elogind, вариант Logind, не привязанный к Systemd.
Новшества Devuan 4.0:
Пакетная база - Debian Bullseye 11.1, ядро Linux - 5.10
На выбор представлены Sysvinit, OpenRC, Runit.
Добавлена новая тема оформления для загрузочной заставки, менеджера входа и рабочего стола.
Реализована поддержка GDM3, SDDM помимо Slim.
Предоставлена возможность использования без systemd всех пользовательских окружений, доступных в Debian. Добавлена поддержка LXDE.
Для людей с проблемами со зрением предоставлена возможность голосового сопровождения процесса установки и добавлена поддержка дисплеев на базе шрифта Брайля.
Новый релиз системного менеджера GNU/Linux — systemd (лицензия GPL-v2+):
возможность явного или автоматического выбора из нескольких root разделов в образе диска с помощью параметра --image= в systemd-nspawn, systemd-dissect и других утилитах, работающих с образами дисков
новые опциональные параметры IMAGE_VERSION и IMAGE_ID в файле /etc/os-release
поддержка build-id и .note.package из ELF в systemd-coredump позволяет явным образом соотнести дамп памяти с конкретным пакетом, из которого был установлен соответствующий бинарник
поддержка UUID для событий udev, которая позволяет отслеживать конкретное событие в явном виде
поддержка JSON с помощью интерфейса DBus и параметра командной строки в systemd-hostnamed и systemd-networkd. В дальнейшей её планируется распространить на все компоненты systemd
автоматическое добавление хэшей паролей в shadow для пользователей systemd-homed
поддержка добавления пользователей и групп с помощью конфигурационных файлов в формате JSON в /etc/userdb/, /run/userdb/, /run/host/userdb/ и /usr/lib/userdb/
расширение механизма зависимостей с помощью неконфигурируемых автоматических обратных зависимостей (OnSuccessOf для OnSuccess, UpheldBy для Upholds, OnFailureOf для OnFailure и т. п.) для упрощения отслеживания и настройки зависимостей между юнитами
по многочисленным просьбам анонимусов с LOR была документирована архитектура systemd
И множество других изменений, исправлений и улучшений.
Участник GitHub Security Lab Kevin Backhouse обнаружил уязвимость в Polkit, которая впервые появилась семь лет назад в коммите bfa5036 и с версией 0.113 попала в некоторые дистрибутивы. Она позволяет непривилегированному локальному пользователю получить права root в системе, приложив для этого минимальные усилия. Уязвимости подвержены любые дистрибутивы с установленной версией Polkit 0.113 (или более поздней). Например, такие популярные, как RHEL 8 и Ubuntu 20.04. Уязвимость была устранена 3 июня 2021 года.
Как пишет Kevin Backhouse, уязвимость очень просто эксплуатируется, для этого достаточно простых инструментов: bash, kill, и dbus-send. Кроме них, для своей статьи (PoC exploit) он так же использовал accountsservice и gnome-control-center, которые можно найти на многих системах с GUI. Следует заметить, что accountsservice и gnome-control-center не содержат уязвимость и являются просто клиентами для Polkit.
Собственно уязвимость активируется с помощью команды dbus-send (т.е. простой отправки сообщения через шину D-Bus), которую нужно завершить во время, пока Polkit ещё обрабатывает запрос. Теоретически, можно нажать Ctrl + C на клавиатуре в нужный момент, однако Kevin Backhouse не смог продемонстрировать именно такой вариант.