Выпуск системного менеджера systemd 248


После четырёх месяцев разработки представлен релиз системного менеджера systemd 248. В новом выпуске обеспечена поддержка образов для расширения системных каталогов, файла конфигурации /etc/veritytab, утилиты systemd-cryptenroll, разблокирования LUKS2 при помощи чипов TPM2 и токенов FIDO2, запуска unit-ов в изолированном пространстве идентификаторов IPC, протокола B.A.T.M.A.N. для mesh-сетей, бэкенда nftables для systemd-nspawn. Стабилизирован systemd-oomd.

Основные изменения:

  • Реализована концепция образов расширения системы (System Extension), которые можно использовать для расширения иерархии каталогов /usr/ и /opt/, и добавления дополнительных файлов во время работы, даже если указанные каталоги примонтированы в режиме только для чтения. При подключении образа расширения системы его содержимое накладывается на иерархию /usr/ и /opt/ при помощи OverlayFS.

    • Для подключения, отключения, просмотра и обновления образов системных расширений предложена новая утилита systemd-sysext. Для автоматического подключения уже установленных образов во время загрузки добавлен сервис systemd-sysext.service. В файл os-release добавлен параметр "SYSEXT\_LEVEL=" для определения уровня поддерживаемых расширений системы.
    • Для unit-ов реализована настройка ExtensionImages, которую можно использовать для привязки образов расширения системы к иерархии пространства имён ФС отдельных изолированных сервисов.
    • Добавлен файл конфигурации /etc/veritytab для настройки верификации данных на блочном уровне при помощи модуля dm-verity. Формат файла аналогичен /etc/crypttab - "имя\_раздела устройство\_для\_данных устройство\_для\_хэшей хэш\_проверки\_корня опции". Для настройки поведения dm-verity для корневого устройства добавлен параметр командной строки ядра systemd.verity.root\_options.
    • В systemd-cryptsetup добавлена возможность извлечения URI токена PKCS#11 и зашифрованного ключа из заголовка метаданных LUKS2 в формате JSON, что позволяет интегрировать сведения об открытии зашифрованного устройства в само устройство без привлечения внешних файлов.
    • В systemd-cryptsetup предоставлена поддержка разблокирования шифрованных разделов LUKS2 при помощи чипов TPM2 и токенов FIDO2, помимо ранее поддерживаемых токенов PKCS#11. Загрузка libfido2 осуществляется через dlopen(), т.е. наличие проверяется на лету, а не в форме жёстко привязанной зависимости.
    • В /etc/crypttab для systemd-cryptsetup добавлены новые опции "no-write-workqueue" и "no-read-workqueue" для включения синхронной обработки ввода/вывода, связанного с шифрованием и расшифровкой.
    • В утилиту systemd-repart добавлена возможность активации шифрованных разделов при помощи чипов TPM2, например, для создания шифрованного раздела /var при первой загрузке.
    • Добавлена утилита systemd-cryptenroll для привязки токенов TPM2, FIDO2 и PKCS#11 к разделам LUKS, а также для открепления и просмотра токенов, привязки запасных ключкй и задания пароля для доступа.
    • Добавлен параметр PrivateIPC, позволяющий в unit-файле настроить запуск процессов в изолированном пространстве IPC со своими отдельными идентификаторами и очередью сообщений. Для подключения unit-а к уже созданному пространству идентификаторов IPC предложена опция IPCNamespacePath.
    • Добавлены настройки ExecPaths и NoExecPaths, позволяющие применить флаг noexec к отдельным частям файловой системы.
    • В systemd-networkd добавлена поддержка mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы. Для настройки предложены секция \[BatmanAdvanced\] в .netdev , параметр BatmanAdvanced в файлах .network и новый тип устройства "batadv".
    • Стабилизирована реализация механизма раннего реагирования на нехватку памяти в системе systemd-oomd. Добавлена опция DefaultMemoryPressureDurationSec для настройки времени ожидания освобождения ресурса перед воздействием на unit. Systemd-oomd использует подсистему ядра PSI (Pressure Stall Information) и позволяет выявить начало возникновения задержек из-за нехватки ресурсов и выборочно завершить работу ресурсоёмких процессов на стадии, когда система ещё не находится в критическом состоянии и не начинает интенсивно урезать кэш и вытеснять данные в раздел подкачки.
    • Добавлен параметр командной строки ядра - "root=tmpfs", позволяющий примонтировать корневой раздел во временном хранилище, размещённом в оперативной памяти при помощи Tmpfs.
    • Параметр в /etc/crypttab, определяющий файл с ключом, теперь может указывать на сокеты с типом AF\_UNIX и SOCK\_STREAM. Ключ в этом случае должен отдаваться при подсоединении к сокету, что, например, может применяться для создания сервисов, динамически отдающих ключи.
    • Запасное имя хоста (fallback) для использования системным менеджером и systemd-hostnamed теперь может быть задано двумя путями: через параметр DEFAULT\_HOSTNAME в os-release и через переменную окружения $SYSTEMD\_DEFAULT\_HOSTNAME. В systemd-hostnamed также реализована обработка указания "localhost" в имени хоста и добавлена возможность экспорта имени хоста, а также свойств "HardwareVendor" и "HardwareModel" через DBus.
    • Блок с выставляемыми переменными окружения теперь может быть настроен через новую опцию ManagerEnvironment в system.conf или user.conf, а не только через командную строку ядра и настройки unit-файлов.
    • На стадии компиляции предоставлена возможность использования для запуска процессов системного вызова fexecve() вместо execve() для сокращения задержки между проверкой контекста безопасности и его применением.
    • Для unit-файлов добавлены новые условные операции ConditionSecurity=tpm2 и ConditionCPUFeature для проверки наличия устройств TPM2 и отдельных возможностей CPU (например, ConditionCPUFeature=rdrand можно использовать для проверки поддержки процессором операции RDRAND).
    • Для доступных ядер реализована автоматическая генерация таблиц системных вызовов для фильтров seccomp.
    • Добавлена возможность подстановки новых привязок монтирования (bind mounts) в существующие пространства точек монтирования (mount namespace) сервисов, без перезапуска сервисов. Подстановка выполняется командами 'systemctl bind ‹unit› ‹path›…' и 'systemctl mount-image ‹unit› ‹image›…'.
    • В настройки StandardOutput и StandardError добавлена поддержка указания путей в форме "truncate:‹path›" для очистки перед использованием.
    • В sd-bus добавлена возможность установки соединения с сеансом заданного пользователя внутри локального контейнера. Например "systemctl --user -M lennart@ start quux".
    • В файлах systemd.link в секции \[Link\] реализованы параметры:
      • Promiscuous - позволяет перевести устройство в режим "promiscuous" для обработки всех сетевых пакетов, включая не адресованные текущей системе;
      • TransmitQueues и ReceiveQueues для настройки числа очередей TX и RX;
      • TransmitQueueLength для настройки размера очереди TX; GenericSegmentOffloadMaxBytes и GenericSegmentOffloadMaxSegment для задания лимитов применения технологии GRO (Generic Receive Оffload).
    • В файлы systemd.network добавлены новые настройки:
      • \[Network\] RouteTable для выбора таблицы маршрутизации;
      • \[RoutingPolicyRule\] Type для типа маршрутизации ("blackhole, "unreachable", "prohibit");
      • \[IPv6AcceptRA\] RouteDenyList и RouteAllowList для списков разрешённых и запрещённых анонсов маршрутов;
      • \[DHCPv6\] UseAddres для игнорирования выдаваемого DHCP адреса;
      • \[DHCPv6PrefixDelegation\] ManageTemporaryAddress;
      • ActivationPolicy для определения политики в отношении активности интерфейса (всегда поддерживать в состоянии UP или DOWN или разрешить пользователю менять состояния командой "ip link set dev").
    • В файлы systemd.netdev добавлены опции \[VLAN\] Protocol, IngressQOSMaps, EgressQOSMaps и \[MACVLAN\] BroadcastMulticastQueueLength для настройки обработки пакетов VLAN.
    • Прекращено монтирование каталога /dev/ в режиме noexec, так как это приводит к конфликту при использовании исполняемого флага с файлами /dev/sgx. Для возвращения старого поведения можно использовать настройку NoExecPaths=/dev.
    • Права доступа к файлу /dev/vsock изменены на 0o666, а файлы /dev/vhost-vsock и /dev/vhost-net перемещены в группу kvm.
    • База идентификаторов оборудования расширена USB-устройствами для чтения отпечатков пальцев, корректно поддерживающих переход в спящий режим.
    • systemd-resolved добавлена поддержка выдачи ответов на DNSSEC-запросы через stub-резолвер. Локальные клиенты могут проводить DNSSEC-валидацию самих себя, а внешние проксируются в неизменном виде к родительскому DNS-серверу.
    • В resolved.conf добавлена опция CacheFromLocalhost, при установке которой systemd-resolved будет использовать кэшировние даже для обращений к DNS-серверу по адресу 127.0.0.1 (по умолчанию кэширование подобных запросов отключено для исключения двойного кэширования).
    • В systemd-resolved добавлена поддержка RFC-5001 NSID в локальном DNS-резолвере, позволяющая клиентам отличить взаимодействие с локальным резолвером и другим сервером DNS.
    • В утилите resolvectl реализована возможность вывода сведений об источнике поступления данных (локальный кэш, запрос по сети, ответ локального обработчика) и применении шифрования при передаче данных. Для управления процессом определения имени предложены опции --cache, --synthesize, --network, --zone, --trust-anchor и --validate.
    • В systemd-nspawn добавлена поддержка настройки межсетевого экрана при помощи nftables в дополнение к существующей поддержке iptables. В настройке IPMasquerade в systemd-networkd добавлена возможность использования бэкенда на основе nftables.
    • В systemd-localed добавлена поддержка вызова locale-gen для генерации недостающих локалей.
    • В различные утилиты добавлены опции --pager/--no-pager/--json= для включения/выключения режима постраничного просмотра и вывода в формате JSON. Добавлена возможность установки числа используемых в терминале цветов через переменную окружения SYSTEMD\_COLORS ("16" или "256").
    • Объявлены устаревшими сборка с раздельными иерархиями каталогов (разделение / и /usr) и поддержка cgroup v1.
    • Основная ветка в Git переименована из 'master' в 'main'.
    Источник: https://www.opennet.ru/opennews/art.shtml?num=54871


Comments 0