После четырёх месяцев разработки представлен релиз системного менеджера 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 …’ и ‘systemctl mount-image …’.
- В настройки StandardOutput и StandardError добавлена поддержка указания путей в форме “truncate:” для очистки перед использованием.
- В 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’.