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

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

  • Добавлен режим '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

OpenNet прочитано 4508 раз