LINUXTALKS.CO

Выпуск системного менеджера systemd 252 с поддержкой UKI (Unified Kernel Image)

 

L


0

0

После пяти месяцев разработки представлен релиз системного менеджера systemd 252. Ключевым изменением в новой версии стала интеграция поддержки модернизированного процесса загрузки, позволяющего верифицировать по цифровым подписям не только ядро и загрузчик, но и компоненты базового системного окружения.

Предложенный метод подразумевает использование при загрузке унифицированного образа ядра UKI (Unified Kernel Image), объединяющего обработчик для загрузки ядра из UEFI (UEFI boot stub), образ ядра Linux и загружаемое в память системное окружение initrd, применяемое для начальной инициализации на стадии до монтирования корневой ФС. UKI-образ оформляется в виде одного исполняемого файла в формате PE, который может быть загружен при помощи традиционных загрузчиков или напрямую вызван из прошивки UEFI. При вызове из UEFI предоставляется возможность проверки целостности и достоверности по цифровой подписи не только ядра, но и содержимого initrd.

Для расчёта параметров регистров TPM PCR (Trusted Platform Module Platform Configuration Register), используемых для контроля целостности и формирования цифровой подписи образа UKI, в состав включена новая утилита systemd-measure. Используемый в подписи открытый ключ и сопутствующая информация о PCR может быть встроена непосредственно в загрузочный образ UKI (ключ и подпись сохраняются в в файле в формате PE в полях '.pcrsig' и '.pcrkey') и извлечена из него внешними или внутренними утилитами.

В том числе для использования данной информации адаптированы утилиты systemd-cryptsetup, systemd-cryptenroll и systemd-creds, при помощи которых можно обеспечить привязку зашифрованных дисковых разделов к заверенному цифровой подписью ядру (в этом случае доступ к зашифрованному разделу предоставляется только если образ UKI прошёл верификацию по цифровой подписи на основе параметров, размещённых в TPM).

Дополнительно в состав включена утилита systemd-pcrphase, позволяющая управлять привязкой различных стадий загрузки к параметрам, размещаемым в памяти криптопроцессоров, поддерживающих спецификацию TPM 2.0 (например, можно сделать ключ расшифровки раздела LUKS2 доступным только в образе initrd и блокировать доступ к нему на более поздних этапах загрузки).

Некоторые другие изменения:

  • Обеспечено использование по умолчанию локали C.UTF-8, если в настройках не определена иная локаль.
  • Реализована возможность выполнения операции полной преднастройки сервисов ("systemctl preset") во время первой загрузки. Для включения преднастройки во время загрузки требуется сборка с опцией "-Dfirst-boot-full-preset", но в будущих выпусках её планируют активировать по умолчанию.
  • В unit-ах управления пользователями задействован контроллер ресурсов CPU, что позволило обеспечить применение настроек CPUWeight ко всем slice-юнитам, используемым для разбиения системы на части (app.slice, background.slice, session.slice) для изоляции ресурсов между различными пользовательскими сервисами, конкурирующими за ресурсы CPU. В СPUWeight также реализована поддержка значения "idle" для активации соответствующего режима предоставления ресурсов.
  • Во временных ("transient") unit-ах и в утилите systemd-repart разрешено переопределение настроек через создание drop-in файлов в каталоге /etc/systemd/system/имя.d/.
  • Для системных образов обеспечено выставление флага прекращения поддержки ('support-ended'), определяя данный факт на основании значения нового параметра "SUPPORT_END=" в файле /etc/os-release.
  • Добавлены настройки "ConditionCredential=" и "AssertCredential=", которые можно использовать для игнорирования или аварийного завершения юнитов при отсутствии в системе определённых учётных данных.
  • В system.conf и user.conf добавлены настройки "DefaultSmackProcessLabel=" и "DefaultDeviceTimeoutSec=" для определения уровня безопасности SMACK и таймаута активации юнита, применяемых по умолчанию.
  • В настройках "ConditionFirmware=" и "AssertFirmware=" добавлена возможность указания отдельных полей SMBIOS, например для запуска юнита только в случае когда поле /sys/class/dmi/id/board_name содержит значение "Custom Board", можно указать "ConditionFirmware=smbios-field(board_name = "Custom Board")".
  • В процессе инициализации (PID 1) добавлена возможность импорта учётных данных из полей SMBIOS (Type 11, "OEM vendor strings") в дополнение к их определению через qemu_fwcfg, что упрощает предоставление учётных данных виртуальным машинам и позволяет обойтись без сторонних инструментов, таких как cloud-init и ignition.
  • Во время завершения работы изменена логика отмонтирования виртуальных ФС (proc, sys) и обеспечено сохранения в логе сведений о процессах, блокирующих отмонтирование файловых систем.
  • В фильтре системных вызовов (SystemCallFilter) разрешён по умолчанию доступ к системному вызову riscv_flush_icache.

    \
  • В загрузчике sd-boot добавлена возможность загрузки в смешанном режиме, в котором 64-разрядное ядро Linux запускается из 32-разрядной прошивки UEFI. Добавлена экспериментальная возможность автоматического применения ключей SecureBoot из файлов, найденных в ESP (EFI system partition).
  • В утилиту bootctl добавлены новые опции "--all-architectures" для установки бинарных файлов для всех поддерживаемых архитектур EFI, "--root=" и "--image=" для работы с каталогом или дисковым образом, "--install-source=" для определения источника для установки, "--efi-boot-option-description=" для управления именами загрузочных записей.
  • В утилиту systemctl добавлена команда 'list-automounts' для показа списка автоматически примонтированных каталогов и опция "--image=" для выполнения команд в привязке к указанному дисковому образу. В команды 'show' и 'status' добавлены опции "--state=" и "--type=".
  • В systemd-networkd добавлены опции "TCPCongestionControlAlgorithm=" для выбора алгоритма управления перегрузкой TCP, "KeepFileDescriptor=" для сохранения файлового дескриптора интерфейсов TUN/TAP, "NetLabel=" для установки меток NetLabel, "RapidCommit=" для ускорения настройки через DHCPv6 (RFC 3315). В параметре "RouteTable=" разрешено указание имён таблиц маршрутизации.
  • В systemd-nspawn разрешено использование относительных файловых путей в опциях "--bind=" и "--overlay=". В опцию "--bind=" добавлена поддержка параметра 'rootidmap' для привязки идентификатора пользователя root в контейнере к владельцу примонтированного каталога на стороне хост-системы.
  • В systemd-resolved в качестве бэкенда для шифрования по умолчанию задействован пакет OpenSSL (поддержка gnutls сохранена в качестве опции). Неподдерживаемые алгоритмы DNSSEC теперь обрабатываются как небезопасные, вместо возвращения ошибки (SERVFAIL).
  • В systemd-sysusers, systemd-tmpfiles и systemd-sysctl реализована возможность передачи настроек через механизм хранения учётных данных.
  • В утилиту systemd-analyze добавлена команда 'compare-versions' для сравнения строк с номерами версий (по аналогии с 'rpmdev-vercmp' и 'dpkg --compare-versions'). В команду 'systemd-analyze dump' добавлена возможность фильтрации юнитов по маске.
  • При выборе многоэтапного режима сна (suspend-then-hibernate, переход в спящий режим после ждущего режима), время нахождения в ждущем режиме теперь выбирается на основании прогноза оставшегося времени автономной работы. Мгновенный переход в спящий режим производится когда остаётся менее 5% заряда аккумулятора.
  • В 'journalctl' добавлен новый режим вывода "-o short-delta", отображающий разницу во времени между разными сообщениями в логе.
  • В systemd-repart добавлена поддержка создания разделов с ФС Squashfs и разделов для dm-verity, в том числе с цифровыми подписями.
  • В systemd-logind добавлена настройка "StopIdleSessionSec=" для завершения неактивного сеанса после истечения заданного таймаута.
  • В systemd-cryptenroll добавлена опция "--unlock-key-file=" для извлечения ключа расшифровки из файла, а не через вывод запроса пользователю.
  • Обеспечена возможность выполнения утилиты systemd-growfs в окружениях без udev.
  • В systemd-backlight улучшена поддержка систем с несколькими графическими картами.
  • Лицензия на приводимые в документации примеры кода изменена с CC0 на MIT-0.

Изменения нарушающие совместимость:

  • При проверке номера версии ядра при помощи директивы ConditionKernelVersion в операторах '=' и '!=' теперь применяется простое строковое сравнение, а если оператор сравнения вообще не указан может применяться сопоставление по glob-маске с использованием символов '*', '?' и '[', ']'. Для сравнения версий в стиле функции stverscmp() следует использовать операторы '<', '>', '<=' и '>='.
  • Метка SELinux, применяемая для проверки доступа из unit-файла, теперь читается на этапе загрузки файла, а не в момент проверки доступа.
  • Условие "ConditionFirstBoot" теперь срабатывает при первой загрузке системы только непосредственно на стадии загрузки и возвращает "false" при вызове юнитов после завершения загрузки.
  • В 2024 году в systemd планируется прекратить поддержку механизма ограничения ресурсов cgroup v1, переведённого в разряд устаревших в выпуске systemd 248. Администраторам рекомендуется заранее позаботиться о переводе на cgroup v2 сервисов, завязанных на cgroup v1. Ключевым отличием cgroups v2 от v1 является применение общей иерархии cgroups для всех видов ресурсов, вместо раздельных иерархий для распределения ресурсов CPU, для регулирования потребления памяти и для ввода/вывода. Раздельные иерархии приводят к трудностям организации взаимодействия между обработчиками и к дополнительным затратам ресурсов ядра при применении правил для процесса, упоминаемого в разных иерархиях.
  • Во второй половине 2023 года планируется прекратить поддержку раздельных иерархий каталогов, когда /usr монтируется отдельно от корня или разделены каталоги /bin и /usr/bin, /lib и /usr/lib.

// cc-by opennet.ru
// converted with crypt’s opennet autoreposter

>>> Подробности

★★★☆☆
Ответ на: комментарий от sorrow

Я помню как агрессивно продвигали PulseAudio и NetworkManager несмотря на их очень низкое качество. А systemd продвигали в debian путём бюрократических интриг.

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от sorrow

Это был сарказм по поводу твоего энтузиазма насчёт впихивания криво написанного комбайна везде где только можно.

cocucka    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от sorrow

~луддитам~ криво написанного комбайна место на свалке истории

И опять fixed. Ну, сколько можно. Мне надоело исправлять твои ошибки.

odalist    
★★★★★★★
Linux / Safari
Ответ на: комментарий от odalist

криво написанного комбайна

Это твоё луддитское мнение. Не надо выдавать его за истину.

sorrow    
★★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от sorrow

Это твоё луддитское мнение.

Это мнение многих сисадминов.

Не надо выдавать его за истину.

Твое мнение, как админа локалхоста, очень важно для нас. Продолжай дальше.

odalist    
★★★★★★★
Linux / Safari
Ответ на: комментарий от alexferman

А ты разве не за системду воюешь?

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от odalist

Ок. Сисадмины-ретрограды могут продолжать пользоваться ретроградскими дистрами, им никто не запрещает. Большинство же оценило преимущества, которые даёт systemd и отлично его используют.

sorrow    
★★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от sorrow

Большинство же оценило преимущества

Эти преимущества в твоей попе. В виде анального зонда.

отлично его используют.

Любишь, когда тебя используют? Неужели поклонник BDSM?

odalist    
★★★★★★★
Последнее исправление: odalist (всего исправлений: 1)

Linux / Firefox
Ответ на: комментарий от odalist

Никаких зондов в systemd нет, код полностью открыт.

А вот то, что у тебя такие ассоциации присутствуют - как раз интересный симптом. Я конечно ни на что не намекаю.

sorrow    
★★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от odalist

Можешь доказать обратное?

sorrow    
★★★★★★★★★★★★
Linux / Firefox
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=90