28.09.2021

Выпуск системного менеджера 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’.

Источник.