Выпуск сістэмнага мэнэджара systemd 252 з падтрымкай UKI (Unified Kernel Image)

Пасля пяці месяцаў распрацоўкі прадстаўлены рэліз сістэмнага мэнэджара 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, што спрашчае прадастаўленне уліковых дадзеных віртуальным машынам і дазваляе абыйсціся без іншых інструментаў, такіх як -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=" для паскарэння налады праз DHCP 6). У параметры "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.

Крыніца: opennet.ru

Дадаць каментар