Выпуск системного менеджера systemd 256 с утилитой run0 для замены sudo

После полугода разработки представлен релиз системного менеджера systemd 256. Ключевые изменения: утилита run0 для замены sudo, утилита importctl для работы с дисковыми образами, возможность версионированного доступа к ресурсам, концепция капсул для запуска дополнительных сервисных менеджеров, режим перенаправления логов systemd-journald в произвольный сокет, поддержка протокола Varlink в systemd-networkd, systemd-machined, bootctl, systemd-creds и systemd-hostnamed, генератор юнитов «systemd-ssh-generator» и утилита «systemd-ssh-proxy».

Среди изменений в новом выпуске:

  • В состав включена утилита run0 для выполнения процессов под идентификаторами других пользователей, которая позиционируется как более безопасная замена программы sudo, реализованная в форме надстройки над командой systemd-run. В run0 вместо использования SUID осуществляется обращение к системному менеджеру с запросом запуска процесса, создания нового псевдотерминала (PTY) и пересылки данных между ним и текущим терминалом (TTY). Привилегированный процесс запускается в изолированном контексте, который порождается процессом PID 1, а не процессом пользователя, т.е. не наследует свойства окружения пользователя. Для авторизации и определения возможностей пользователя применяется Polkit. При работе с повышенными привилегиями в заголовок добавляется индикатор в виде красной точки, а оттенок фона в терминале меняется на красный.
  • Добавлена новая утилита командной строки importctl, предназначенная для загрузки, импорта и экспорта дисковых образов с использованием сервиса systemd-importd. В importctl реализованы команды pull-tar, pull-raw, import-tar, import-raw, import-fs, export-tar, export-raw, list-transfers и cancel-transfer, функциональность которых выделена в отдельную утилиту из программы machinectl.
  • Добавлен исполняемый файл systemd-vpick c реализацией протокола vpick, обеспечивающего версионированный доступ к ресурсам, таким как дисковые образы. Systemd-vpick позволяет загружать ресурсы из каталогов «*.v/«, в которых может храниться несколько версий определённых файлов. Номер версии указывается в имени файлов, например, «mymachine_2.1.5.raw». Если при запросе явно не указывается номер версии, то автоматически будет использован файл с наиболее свежей версией. Поддержка версионированной загрузки ресурсов реализована в командах «systemd-nspawn —image=/—directory=», systemd-dissect и systemd-portabled, а также в настройках юнитов «RootDirectory=», «RootImage=», «ExtensionImages=» и «ExtensionDirectories=».
  • Реализована концепция капсул («capsules»), позволяющих запускать дополнительные отдельные сервисные менеджеры для управления группой процессов, работающих под временными пользователями, создаваемыми динамически и удаляемыми после завершения работы сервисного менеджера. Капсулы позволяют обойтись без создания учётных записей пользователей для запуска групп сервисов, используют домашний каталог «/var/lib/capsules/‹имя_капсулы>» и набор типовых сервисов. Для запуска капсулы достаточно выполнить команду «systemctl start capsule@‹имя›.service». Для работы в контексте капсул в различные утилиты, такие как systemctl и systemd-run, добавлена опция
    «—capsule=»/»-C».

  • В systemd-journald добавлена возможность перенаправления потока записей в сетевой или локальный сокет (AF_INET, AF_INET6, AF_UNIX, AF_VSOCK), указанный через параметр ForwardToSocket в journald.conf или через свойство ‘journald.forward_to_socket’. Для ограничения отправляемых данных уровнем логгирования предложен параметр MaxLevelSocket. Для приёма логов может использоваться процесс systemd-journal-remote, в который добавлена поддержка сокетов AF_VSOCK и AF_UNIX.

    В systemd-vmspawn добавлена опция «—forward-journal» для перенаправления логов из виртуальной машины в хост-окружение, используя сокет AF_VSOCK. В systemd-journal-gatewayd добавлена возможность ограничения периодов времени, в которые будут приниматься логи. В утилиту journalctl добавлена опция «-T» («—exclude-identifier») для игнорирования определённых идентификаторов syslog, а также опция «—list-namespaces» для показа списка доступных пространств имён.

  • Расширены возможности по интеграции с sshd. Добавлена поддержка использования при авторизации входящих соединений ключей, полученных через userdbctl. Добавлен новый генератор юнитов «systemd-ssh-generator», который при наличии исполняемого файла sshd позволяет настроить его активацию в привязке к различным сокетам (например, в контейнерах можно настроить вызов sshd при обращении к 22 порту через AF_VSOCK). Добавлен «systemd-ssh-proxy» — плагин к утилите ssh (включается через ProxyCommand/ProxyUseFdpass), позволяющий подключаться через сокеты AF_VSOCK и AF_UNIX (например, можно использовать ssh вместо sudo для организации доступа локальных пользователей к ресурсам).
  • В рамках инициативы по сокращению зависимостей у libsystemd реализована динамическая загрузка библиотек liblz4, libzstd, liblzma, libkmod и libgcrypt при помощи вызова dlopen() в ситуациях, когда их функции действительно необходимы.

  • Помимо каталога /etc, различные компоненты systemd теперь пытаются загрузить основной файл конфигурации из каталогов /usr/lib, /usr/local/lib и /run. Например,
    systemd-logind будет определять файл конфигурации в следующей последовательности: /etc/systemd/logind.conf, /run/systemd/logind.conf,
    /usr/local/lib/systemd/logind.conf и /usr/lib/systemd/logind.conf. В systemd-udevd аналогичным способом реализовано переопределние файла udev.conf.

  • Непривилегированным пользователям предоставлена возможность доступа к зашифрованным учётным данным сервисов. Для шифрования и расшифровки учётных данных для определённого пользователя в утилиту systemd-creds добавлены опции «—user» и «—uid».
  • Реализована возможности сборки systemd из исходных текстов при отключении всех устаревших возможностей в OpenSSL 3.0.
  • В системный менеджер добавлена настройка «ProtectSystem=«, позволяющая управлять монтированием частей ФС в режиме только для чтения на уровне всей системы, а не только отдельных unit-ов. По умолчанию параметр ProtectSystem активирован для initrd для запрета записи в каталог /usr во время загрузки.
  • Для unit-ов предложены новые настройки «WantsMountsFor=» для определения монтирования раздела как необязательной зависимости и «MemoryZSwapWriteback=» для управления параметром memory.zswap.write, появившемся в ядре Linux 6.8. В unit-ах .mount и .swap разрешено использование настройке «What=» идентификаторов в стиле fstab, таких как «UUID=…» и «LABEL=…». В настройке «RestrictNetworkInterfaces=» разрешено использование альтернативных имён сетевых интерфейсов.
  • В юниты «.socket» с опцией «Accept=yes» добавлена настройка «MaxConnectionsPerSource=», позволяющая задать лимит на число одновременных соединений с одного IP-адреса или UID (для UNIX-сокетов).
  • В процесс «systemd-bsod«, реализующий аналог «синего экрана смерти», добавлена опция «—tty» для выбора терминала, на котором будет показано полноэкранное уведомление в случае возникновения критических ошибок (LOG_EMERG).
  • В каталоге /dev обеспечено создание символических ссылок, сочетающих информацию на основе пути (by-path) и меток (by-{label,uuid}): «/dev/disk/by-path/‹path›/by-‹label|uuid|…›/‹label|uuid|…›», что позволяет выделить одинаковые разделы на разных устройствах хранения (например, после клонирования содержимого диска на другое устройство). Для мультимедийных контроллеров systemd-udevd теперь создаёт символические ссылки «/dev/media/by-path/*» (например, «/dev/media/by-path/pci-0000:04:00.3-usb-0:1:1.0-media-controller»).
  • Добавлен сервис systemd-udev-load-credentials.service для загрузки udev-правил из базы учётных записей (credential).
  • В процессах systemd-networkd и systemd-hostnamed реализован интерфейс Varlink. В systemd-hostnamed добавлена поддержка отдачи идентификаторов системы и загрузки через D-Bus, а также всех данных из файлов os-release и machine-info через D-Bus и Varlink. В systemd-networkd реализован экспорт свойств NamespaceId и NamespaceNSID через D-Bus и Varlink, а также перебор
    пиров LLDP, используя API на базе Varlink.

  • В systemd-networkd реализованы настройки IPv6RetransmissionTimeSec и
    UseRetransmissionTime для управлением временем повторной отправки NS-сообщений (Neighbor Solicitation), применяемых для определения соседних хостов IPv6. Добавлена поддержка получения ключей для VPN Wireguard из базы учётных записей (credential). В link-файлы добавлен параметр ReceivePacketSteeringCPUMask для организации привязки обработчиков входящих пакетов к определённым CPU.

  • В утилиту networkctl добавлены параметры ‘mask’ и ‘unmask’ для игнорирования файлов конфигурации (.network). Реализована команда ‘networkctl edit —runtime’ для редактирования временных файлов конфигурации в /run/systemd/network/.
  • В systemd-nspawn добавлена поддержка переноса в контейнер сетевых интерфейсов для Wi-Fi-устройств.
  • В systemd-resolved добавлена поддержка расширенных кодов ошибок DNS (Extended DNS Errors, RFC 8914), а также DNS-записей SVCB, NAPTR и HTTPS (RFC 9460, RFC 2915). Добавлена поддержка команды «systemctl reload systemd-resolved» для перезагрузки конфигурации systemd-resolved без перезапуска сервиса.
  • Добавлен режим ‘systemctl edit —stdin’, позволяющий создавать и изменять unit-файлы на основе содержимого, передаваемого через стандартный входной поток (например, для создания юнитов из скриптов).
  • Добавлена команда ‘systemd-analyze architectures’ для вывода списка известных архитектур CPU.
  • Добавлена команда ‘systemd-tmpfiles —purge’ для удаления всех временных файлов и каталогов, созданных через настройки в tmpfiles.d, а также команда «systemd-tmpfiles —dry-run» для отображения журнала действий без их фактического выполнения. В portablectl добавлена опций «—clean» для очистки всех данных, связанных переносимыми сервисами (кэш, логи, состояние, runtime-данные и fdstore), после их отключения.
  • В hostnamectl, resolvectl и loginctl добавлена опция ‘-j’ для вывода в формате JSON.
  • В утилите systemd-dissect реализована опция «—make-archive» для создания архивного файла (например, tar.gz) из дискового образа.
  • Расширены возможности по запуску виртуальных машин. В утилиту systemd-vmspawn, предназначенную для запуска виртуальных машин, добавлены опции: «—firmware» для настройки прошивки, «—tpm» для включения программной реализации TPM, «—linux» для указания загружаемого ядра, «—initrd» для указания образа initrd, «-D» для задания корневого каталога, «—private-users» для включения пространства имён для пользователей, «—bind=» и «—bind-ro» для проброса частей ФС их хост-окружения в гостевую систему, «—extra-drive» для подключения дополнительных устройств хранения, «-n/—network-tap/—network-user-mode» для настройки сети, «—console/—background» для выбора метода взаимодействия с VM, «—pass-ssh-key/—ssh-key-type» для размещения SSH-ключей в VM. В команде «machinectl start» помимо возможности пуска контейнеров через systemd-nspawn добавлена поддержка запуска виртуальных машин через systemd-vmspawn.
  • В systemd-homed реализована возможность разблокировки домашнего каталога пользователя после его входа через SSH. В утилиту homectl добавлен режим «—offline», позволяющий изменять свойства учётной записи без разблокировки домашнего каталога.
  • Переработаны компоненты для обработки дисковых квот в ФС XFS и EXT4, что позволило реализовать возможность включения квот во время работы, а не только на стадии загрузки.
  • В файл конфигурации sleep.conf добавлен параметр MemorySleepMode для настройки спящего режима.
  • В утилиту varlinkctl добавлена поддержка нового транспорта «ssh:», который можно использовать с OpenSSH 9.4 и более новыми выпусками.
  • Время хранения core-дампов увеличено с 3 дней до 2 недель.

Источник: http://www.opennet.ru/opennews/art.shtml?num=61234