14.08.2022

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

После пяти месяцев разработки представлен релиз системного менеджера systemd 250. В новом выпуске появилась возможность хранения учётных данных в шифрованном виде, реализована верификация автоматически определяемых GPT-разделов по цифровой подписи, улучшено информирование о причинах возникновения задержек при запуске сервисов, добавлены опции для ограничения доступа сервиса к определённым файловым системам и сетевым интерфейсам, обеспечена поддержка контроля целостности разделов при помощи модуля dm-integrity, добавлена поддержка автообновления sd-boot.

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

  • Добавлена поддержка шифрованных и аутентифицированных учётных данных, что может быть полезным для безопасного хранения конфиденциальных материалов, таких как SSL-ключи и пароли доступа, расшифровка производится только при необходимости и в привязке к локальной установке или оборудованию. Данные шифруются автоматически с использованием симметричных алгоритмов шифрования, ключ для которых может размещаться в файловой системе, в чипе TPM2 или с использованием комбинированной схемы. При запуске сервиса учётные данные автоматически расшифруются и становятся доступны сервису в обычном виде. Для работы с зашифрованными учётными данными добавлена утилита ‘systemd-creds’, а для сервисов предложены настройки LoadCredentialEncrypted и SetCredentialEncrypted.
  • В sd-stub, исполняемый файл для EFI, при помощи которого прошивка EFI загружает ядро Linux, добавлена поддержка загрузки ядра с использованием протокола LINUX_EFI_INITRD_MEDIA_GUID EFI. Также в sd-stub добавлена возможность упаковки учётных данных и файлов sysext в архив cpio и передачи этого архива ядру вместе с initrd (дополнительные файлы размещаются в каталоге /.extra/). Указанная возможность позволяет задействовать верифицируемое неизменное окружение initrd, дополняемое при помощи sysexts и зашифрованных данных для аутентификации.
  • Существенно расширена спецификация Discoverable Partitions, предоставляющая средства для определения, монтирования и активации системных разделов, использующих GPT (GUID Partition Tables). По сравнению с прошлыми выпусками для большинства архитектур в спецификации реализована поддержка корневого раздела и /usr, в том числе для платформ не использующих UEFI.

    В Discoverable Partitions также добавлена поддержка разделов, целостность которых верифицируется модулем dm-verity с использованием цифровых подписей PKCS#7, что упрощает создание полностью аутентифицированных дисковых образов. Поддержка верификации интегрирована в различные утилиты, манипулирующие дисковыми образами, включая systemd-nspawn, systemd-sysext, systemd-dissect, сервисы с RootImage, systemd-tmpfiles и systemd-sysusers.

  • Для долго запускаемых или останавливаемых unit-ов в дополнение к показу анимированного индикатора выполнения операции, предоставлена возможность вывода сведений о состоянии, позволяющих понять, что именно происходит с сервисом в данный момент и завершения выполнения какого сервиса ожидает в данный момент системный менеджер.
  • В /etc/systemd/system.conf и /etc/systemd/user.conf добавлен параметр DefaultOOMScoreAdjust, позволяющий откорректировать порог срабатывания OOM-killer при нехватке памяти, применимый к процессам, которые запускает systemd для системы и пользователей. По умолчанию вес системных сервисов выше, чем пользовательских, т.е. при нехватке памяти вероятность завершения пользовательских сервисов выше, чем системных.
  • Добавлена настройка RestrictFileSystems, позволяющая ограничить доступ сервисов к файловым системам. Для ограничения используется LSM-модуль, использующий BPF для ограничения доступа группы процессов к объектам ядра. Например, сервису можно запретить доступ к определённым типам ФС. Для просмотра доступных типов ФС можно использовать команду «systemd-analyze filesystems». По аналогии реализована опция RestrictNetworkInterfaces, позволяющая ограничить доступ к определённым сетевым интерфейсам.
  • Добавлен новый файл конфигурации /etc/integritytab и утилита systemd-integritysetup, настраивающие модуль dm-integrity для контроля целостности данных на уровне отдельных секторов, например, для гарантирования неизменности зашифрованных данных (Authenticated Encryption, гарантирует, что блок данных не был модифицирован обходным путём). Формат файла /etc/integritytab аналогичен файлам /etc/crypttab и /etc/veritytab, за тем исключением, что вместо dm-crypt и dm-verity применяется dm-integrity.
  • Добавлен новый unit-файл systemd-boot-update.service, при активации которого и наличии установленного загрузчика sd-boot, systemd автоматически будет обновлять версию загрузчика sd-boot, поддерживая код загрузчика всегда в актуальном состоянии.
    Сам sd-boot по умолчанию собирается с поддержкой механизма SBAT (UEFI Secure Boot Advanced Targeting), решающего проблемы с отзывом сертификатов для UEFI Secure Boot. В sd-boot также обеспечена возможность разбора загрузочных настроек Microsoft Windows для корректного формирования названий для загрузочных разделов с Windows и показа версии Windows.
  • Предоставлена возможность определения цветовой схемы на этапе сборки. В процессе загрузки добавлена поддержка смены разрешения экрана нажатием клавиши «r». Добавлена горячая клавиша «f» для перехода в интерфейс настройки прошивки. Добавлен режим автоматической загрузки системы, соответствующей элементу меню, выбранному при прошлой загрузке. Добавлена возможность автоматической загрузки EFI-драйверов, размещённых в каталоге /EFI/systemd/drivers/ в разделе ESP (EFI System Partition).

  • Добавлен новый unit-файл factory-reset.target, обрабатываемый в systemd-logind по аналогии с операциями reboot, poweroff, suspend и hibernate, и применяемый для создания обработчиков для выполнения сброса к заводским настройкам.
  • В systemd-gpt-auto-generator реализована возможность автоматической настройки определяемых системой разделов подкачки, зашифрованных подсистемой LUKS2.
  • В коде разбора GPT-образов, используемом в systemd-nspawn, systemd-dissect и подобных утилитах, реализована возможность декодирования образов для других архитектур, что позволяет использовать systemd-nspawn для запуска образов в эмуляторах других архитектур.
  • При инспектировании дисковых образов в systemd-dissect теперь выводятся сведения о назначении раздела, например, пригодности загрузки через UEFI или запуске в контейнере.
  • В файлы system-extension.d/ добавлено поле «SYSEXT_SCOPE», позволяющее обозначить область применения системного образа — «initrd», «system» или «portable».
  • В файл os-release добавлено поле «PORTABLE_PREFIXES», которое можно использовать в переносимых образах для определения поддерживаемых префиксов unit-файлов.
  • В systemd-logind реализованы новые настройки HandlePowerKeyLongPress, HandleRebootKeyLongPress, HandleSuspendKeyLongPress и HandleHibernateKeyLongPress, которые можно использовать для определения действий при удержании определённых клавиш дольше 5 секунд (например, при быстром нажатии клавиши Suspend можно настроить переход в ждущий режим, а при удержании — в спящий).
  • Для unit-ов реализованы настройки StartupAllowedCPUs и StartupAllowedMemoryNodes, который отличаются от аналогичных настроек без префикса Startup тем, что применяется только на этапе загрузки и завершения работы, что позволяет выставить иные ограничения ресурсов при загрузке.
  • Добавлены проверки [Condition|Assert][Memory|CPU|IO]Pressure, позволяющие пропустить или завершить ошибкой активацию unit-а в случае фиксации в системе большой нагрузки на память, CPU и ввод/вывод.
  • Устанавливаемое по умолчанию ограничение на максимальное число inode увеличено для раздела /dev с 64k до 1M, а для /tmp с 400k до 1M.
  • Для сервисов предложена настройка ExecSearchPath, дающая возможность изменить путь для поиска исполняемых файлов, запускаемых через настройки, подобные ExecStart.
  • Добавлена настройка RuntimeRandomizedExtraSec, позволяющая внести случайные отклонения в таймаут RuntimeMaxSec, ограничивающий время выполнения юнита.
  • Расширен синтаксис настроек RuntimeDirectory, StateDirectory, CacheDirectory и LogsDirectory, в которых через указание дополнительного значения, разделённого двоеточием, теперь можно организовать создание символической ссылки на заданный каталог для организации доступа по нескольким путям.
  • Для сервисов предложены настройки TTYRows и TTYColumns для задания числа строк и столбцов в устройстве TTY.
  • Добавлена настройка ExitType, позволяющая изменить логику определения завершения сервиса. По умолчанию systemd отслеживает завершение только основного процесса, но при выставлении ExitType=cgroup системный менеджер будет ждать завершения последнего процесса в cgroup.
  • Реализация поддержки TPM2/FIDO2/PKCS11 в systemd-cryptsetup теперь также собирается в виде плагина к cryptsetup, что позволяет использовать обычную команду cryptsetup для разблокирования шифрованного раздела.
  • В обработчике TPM2 в systemd-cryptsetup/systemd-cryptsetup добавлена поддержка первичных ключей RSA, помимо ключей ECC, для улучшения совместимости с чипами, не поддерживающими ECC.
  • В /etc/crypttab добавлена опция token-timeout, позволяющая определить максимальное время ожидания подключения токена PKCS#11/FIDO2, после истечения которого будет выведен запрос ввода пароля или ключа восстановления.
  • В systemd-timesyncd реализована настройка SaveIntervalSec, позволяющая периодически сохранять значение текущего системного времени на диск, например, для реализации монотонных часов на системах без RTC.
  • В утилиту systemd-analyze добавлены опции: «—image» и «—root» для проверки unit-файлов внутри заданного образа или корневого каталога, «—recursive-errors» для учёта зависимых юнитов при выявлении ошибки, «—offline» для проверки не загруженных, сохранённых на диске unit-файлов, «—json» для вывода в формате JSON, «—quiet» для отключения неважных сообщений, «—profile» для привязки к переносимому профилю. Также добавлена команда inspect-elf для разбора core-файлов в формате ELF и возможность проверки unit-файлов с заданным именем юнита, независимо от того совпадает это имя с именем файла.
  • В systemd-networkd расширена поддержка шины CAN (Controller Area Network). Добавлены настройки для управления режимами CAN: Loopback, OneShot, PresumeAck и ClassicDataLengthCode. В секцию [CAN] файлов .network добавлены опции TimeQuantaNSec, PropagationSegment, PhaseBufferSegment1, PhaseBufferSegment2, SyncJumpWidth, DataTimeQuantaNSec, DataPropagationSegment, DataPhaseBufferSegment1, DataPhaseBufferSegment2 и DataSyncJumpWidth для управления битовой синхронизацией интерфейса CAN.
  • В systemd-networkd для клиента DHCPv4 добавлена опция Label, позволяющая настроить метку адресов, применяемую при конфигурации адресов IPv4.
  • В systemd-udevd для «ethtool» реализована поддержка специальных значений «max», выставляющий размер буфера в максимальное значение, поддерживаемое оборудованием.
  • В .link-файлах для systemd-udevd теперь можно настроить различные параметры объединения сетевых адаптеров и подключения аппаратных обработчиков (offload).
  • В systemd-networkd по умолчанию предложены новые .network-файлы: 80-container-vb.network для определения устройств сетевых мостов, созданных при запуске systemd-nspawn с опциями «—network-bridge» или «—network-zone», 80-6rd-tunnel.network для определения туннелей, автоматически созданных при получении DHCP-ответа с опцией 6RD.
  • В systemd-networkd и systemd-udevd добавлена поддержка проброса IP поверх интерфейсов InfiniBand, для которого в файлы systemd.netdev добавлена секция «[IPoIB]», а в настройке Kind реализована обработка значениния «ipoib».
  • В systemd-networkd обеспечена автоматическая настройка маршрутов для адресов, указанных в параметре AllowedIPs, которая может быть настроена через параметры RouteTable и RouteMetric в секциях [WireGuard] и [WireGuardPeer].
  • В systemd-networkd обеспечена автоматическая генерация не меняющихся MAC-адресов для интерфейсов batadv и bridge. Для отключения данного поведения можно указать значение MACAddress=none в файлах .netdev.
  • В файлы .link в секцию [Link] добавлена настройка WakeOnLanPassword, для определения пароля при работе WoL в режиме «SecureOn».
  • В секцию [CAKE] файлов .network добавлены настройки AutoRateIngress, CompensationMode, FlowIsolationMode, NAT, MPUBytes, PriorityQueueingPreset, FirewallMark, Wash, SplitGSO и UseRawPacketSize для определения параметров механизма управления сетевыми очередями CAKE (Common Applications Kept Enhanced).
  • В секцию [Network] файлов .network добавлена настройка IgnoreCarrierLoss, позволяющая определить как долго ждать перед тем как реагировать на потерю несущего сигнала.
  • В systemd-nspawn, homectl, machinectl и systemd-run расширен синтаксис параметра «—setenv» — если указано только имя переменной (без «=»), значение будет взято из соответствующей переменной окружения (например, при указании «—setenv=FOO» будет взято значение из переменной окружения $FOO и использовано в выставляемой в контейнере одноимённой переменной окружения).
  • В systemd-nspawn добавлена опция «—suppress-sync» для отключения выполнения системных вызовов sync()/fsync()/fdatasync() при создании контейнера (полезно, когда скорость имеет первоочередное значение, а сохранение сборочных артефактов в случае сбоя не важно, так как они могут быть повторно созданы в любой момент).
  • Добавлена новая база данных hwdb, в которую включены различные типы анализаторов сигналов (мультиметры, анализаторы протоколов, осциллографы и т.п.). Информация о камерах в hwdb расширена полем с информацией о типе камеры (обычная или инфракрасная) и направлением съёмки (передняя или задняя).
  • Обеспечена генерация не меняющихся имён сетевых интерфейсов для устройств netfront, применяемых в Xen.
  • Анализ core-файлов утилитой systemd-coredump на базе библиотек libdw/libelf теперь производится в отдельном процессе, изолированном в sandbox-окружении.
  • Процесс systemd-resolved теперь создаёт дополнительный слушающий сокет на адресе 127.0.0.54 в дополнение к 127.0.0.53. Приходящие на адрес 127.0.0.54 запросы всегда перенаправляются на вышестоящий DNS-сервер и не обрабатываются локально.
  • Предоставлена возможность сборки systemd-importd и systemd-resolved с библиотекой OpenSSL вместо libgcrypt.
  • В systemd-importd добавлена поддержка переменных окружения $SYSTEMD_IMPORT_BTRFS_SUBVOL, $SYSTEMD_IMPORT_BTRFS_QUOTA, $SYSTEMD_IMPORT_SYNC, при помощи которых можно отключить генерацию подразделов btrfs, а также настроить квоты и синхронизацию дисков.
  • Добавлена начальная поддержка архитектуры LoongArch, применяемой в процессорах Loongson.
  • В systemd-journald на файловых системах с поддержкой режима copy-on-write обеспечено повторное включение режима COW для архивных журналов, что позволяет обеспечить их сжатие силами Btrfs.
  • В systemd-journald реализована дедупликация одинаковых полей в одном сообщении, которая выполняется на этапе перед помещением сообщения в журнал.
  • В команду shutdown добавлена опция «—show» для отображения запланированного завершения работы.

Источник.