Po pěti měsících vývoje byl představen release systémového správce systemd 252. Klíčovou změnou v nové verzi byla integrace podpory modernizovaného procesu bootování, který umožňuje ověřovat digitálními podpisy nejen jádro a bootloader, ale také komponenty základního systémového prostředí.
Navrhovaná metoda předpokládá použití při bootování unifikovaného obrazu jádra UKI (Unified Kernel Image), který spojuje zpracovatele pro načtení jádra z UEFI (UEFI boot stub), obraz jádra Linux a do paměti načítané systémové prostředí initrd, používané pro počáteční inicializaci v fázi před montováním kořenového FS. UKI obraz je prezentován ve formě jednoho spustitelného souboru ve formátu PE, který lze načíst pomocí tradičních bootloaderů nebo přímo vyvolat z UEFI firmware. Při vyvolání z UEFI se nabízí možnost kontroly integrity a pravosti pomocí digitálního podpisu nejen jádra, ale také obsahu initrd.
Pro výpočet parametrů registrů TPM PCR (Trusted Platform Module Platform Configuration Register), používaných pro kontrolu integrity a generování digitálního podpisu obrazu UKI, byla přidána nová utilita systemd-measure. Používaný veřejný klíč v podpisu a související informace o PCR mohou být integrovány přímo do bootovacího obrazu UKI (klíč a podpis jsou uchovány v souboru ve formátu PE v polích ‘.pcrsig’ a ‘.pcrkey’) a lze je extrahovat externími nebo interními utilitami.
Mezi tímto jsou přizpůsobeny utility systemd-cryptsetup, systemd-cryptenroll a systemd-creds pro použití těchto informací, pomocí kterých lze zajistit vazbu zašifrovaných diskových oddílů k jádru potvrzenému digitálním podpisem (v tomto případě je přístup k zašifrovanému oddílu zajištěn pouze tehdy, pokud obraz UKI prošel ověřením pomocí digitálního podpisu založeného na parametrech umístěných v TPM).
Dále byla přidána utilita systemd-pcrphase, která umožňuje spravovat vazbu různých stádií bootování na parametry umístěné v paměti kryptoprocesorů, které podporují specifikaci TPM 2.0 (například může být klíč pro dešifrování oddílu LUKS2 dostupný pouze v obrazu initrd a přístup k němu může být blokován v pozdějších fázích bootování).
Některé další změny:
- Ve výchozím nastavení je zajištěno použití locale C.UTF-8, pokud není v nastavení určena jiná locale.
- Byla implementována schopnost provádět operaci plného nastavení služeb („systemctl preset“) během prvního spuštění. Pro aktivaci nastavení během zavádění je nutné sestavení s volbou „-Dfirst-boot-full-preset“, ale v budoucích verzích se plánuje její aktivace jako výchozí.
- V uživatelských jednotkách byl nasazen řadič CPU, což umožnilo aplikaci nastavení CPUWeight na všechny slice jednotky používané k rozdělení systému na části (app.slice, background.slice, session.slice) pro izolaci prostředků mezi různými uživatelskými službami soutěžícími o CPU zdroje. V CPUWeight byla také zavedena podpora hodnoty „idle“ pro aktivaci příslušného režimu poskytování prostředků.
- V dočasných („transient“) jednotkách a v nástroji systemd-repart bylo povoleno přepsání nastavení pomocí vytváření drop-in souborů v adresáři /etc/systemd/system/název.d/.
- Pro systémové obrazy bylo zajištěno nastavení příznaku ukončení podpory (‘support-ended’), což stanoví tuto skutečnost na základě hodnoty nového parametru „SUPPORT_END=“ v souboru /etc/os-release.
- Byla přidána nastavení „ConditionCredential=“ a „AssertCredential=“, které lze použít k ignorování nebo nouzovému ukončení jednotek v systému, pokud chybí určité přihlašovací údaje.
- Do souborů system.conf a user.conf byla přidána nastavení „DefaultSmackProcessLabel=“ a „DefaultDeviceTimeoutSec=“, která slouží k určení úrovně bezpečnosti SMACK a časového limitu aktivace jednotky aplikovaných ve výchozím nastavení.
- V nastaveních „ConditionFirmware=“ a „AssertFirmware=“ byla přidána možnost specifikovat jednotlivá pole SMBIOS, například pro spuštění jednotky pouze v případě, že pole /sys/class/dmi/id/board_name obsahuje hodnotu „Custom Board“, lze uvést „ConditionFirmware=smbios-field(board_name = „Custom Board“).
- V průběhu inicializace (PID 1) byla přidána možnost importovat přihlašovací údaje z polí SMBIOS (Typ 11, „řetězce OEM dodavatele“) vedle jejich určení prostřednictvím qemu_fwcfg, což usnadňuje poskytování přihlašovacích údajů. virtuálním strojům a umožňuje se obejít bez externích nástrojů, jako jsou cloud-init a ignition.
- Během vypínání byla změněna logika odpojení virtuálních souborových systémů (proc, sys) a bylo zajištěno uchování informací o procesech, které blokují odpojení souborových systémů v logu.
- Ve filtru systémových volání (SystemCallFilter) je ve výchozím nastavení povolen přístup k systémovému volání riscv_flush_icache.
- Do zavaděče sd-boot byla přidána možnost spouštění v hybridním režimu, ve kterém je 64bitové jádro Linux spuštěno z 32bitového firmware UEFI. Byla přidána experimentální možnost automatického použití klíčů SecureBoot z souborů nalezených v ESP (EFI system partition).
- Do utility bootctl byly přidány nové možnosti „—all-architectures“ pro instalaci binárních souborů pro všechny podporované architektury EFI, „—root=“ a „—image=“ pro práci s adresářem nebo obrazem disku, „—install-source=“ pro určení zdroje pro instalaci, „—efi-boot-option-description=“ pro správu názvů zavaděcích záznamů.
- Do utility systemctl byla přidána příkaz ‘list-automounts’ pro zobrazení seznamu automaticky připojených adresářů a možnost „—image=“ pro provádění příkazů vázaných na určený obraz disku. Do příkazů ‘show’ a ‘status’ byly přidány možnosti „—state=“ a „—type=“.
- Do systemd-networkd byly přidány možnosti „TCPCongestionControlAlgorithm=“ pro výběr algoritmu řízení přetížení TCP, „KeepFileDescriptor=“ pro uchování souborového deskriptoru rozhraní TUN/TAP, „NetLabel=“ pro nastavení štítků NetLabel, „RapidCommit=“ pro urychlení nastavení prostřednictvím DHCPv6 (RFC 3315). U parametru „RouteTable=“ bylo povoleno uvádění názvů tabulek směrování.
- V systemd-nspawn bylo povoleno používání relativních cest k souborům v možnostech „—bind=“ a „—overlay=“. Do možnosti „—bind=“ byla přidána podpora parametru ‘rootidmap’ pro vázání identifikátoru uživatele root v kontejneru k vlastníkovi připojeného adresáře na straně hostitelské systému.
- Ve systemd-resolved byl jako backend pro šifrování ve výchozím nastavení použit balíček OpenSSL (podpora gnutls byla zachována jako možnost). Nepodporované algoritmy DNSSEC jsou nyní zpracovávány jako nezabezpečené, namísto vracení chyby (SERVFAIL).
- V systemd-sysusers, systemd-tmpfiles a systemd-sysctl byla implementována možnost předat nastavení prostřednictvím mechanismu ukládání údajů.
- Do utility systemd-analyze byla přidána příkaz ‘compare-versions’ pro porovnání řetězců s čísly verzí (podobně jako ‘rpmdev-vercmp’ a ‘dpkg —compare-versions’). Do příkazu ‘systemd-analyze dump’ byla přidána možnost filtrování jednotek podle masky.
- Při výběru vícestupňového režimu spánku (suspend-then-hibernate, přechod do režimu spánku po režimu čekání) se nyní doba strávená v režimu čekání vybírá na základě předpovědi zbývajícího času autonomie. Okamžitý přechod do režimu spánku se provádí, když zbývá méně než 5 % nabití baterie.
- Do 'journalctl' byl přidán nový výstupní režim „-o short-delta“, který zobrazuje časový rozdíl mezi různými zprávami v žurnálu.
- Do systemd-repart byla přidána podpora pro vytváření oddílů s FS Squashfs a oddílů pro dm-verity, včetně digitálních podpisů.
- Do systemd-logind byla přidána konfigurace „StopIdleSessionSec=“ pro ukončení neaktivní relace po uplynutí stanoveného časového limitu.
- Do systemd-cryptenroll byla přidána možnost „—unlock-key-file=“ pro získání dešifrovacího klíče z souboru, nikoli prostřednictvím dialogu s uživatelem.
- Byla zajištěna možnost provádění utility systemd-growfs v prostředích bez udev.
- Ve systemd-backlight bylo vylepšeno podporování systémů s několika grafickými kartami.
- Licence na uváděné příklady kódu v dokumentaci byla změněna z CC0 na MIT-0.
Změny narušující kompatibilitu:
- Při kontrole čísla verze jádra pomocí direktivy ConditionKernelVersion se v přehledech ‚=‘ a ‚!=‘ nyní používá jednoduché řetězcové porovnání, a pokud není operátor porovnání uveden vůbec, může být použit globový vzor s použitím znaků ‚*‘, ‚?‘ a ‚[‘, ‚]‘. Pro porovnání verzí ve stylu funkce stverscmp() by měly být použity operátory „<“, „>“, „<=“ a „>=“.
- Štítek SELinux, používaný pro ověřování přístupu z unit-souboru, se nyní čte ve fázi načítání souboru, nikoli v okamžiku ověřování přístupu.
- Podmínka „ConditionFirstBoot“ nyní funguje při prvním spuštění systému pouze přímo ve fázi spouštění a vrací „false“ při volání jednotek po dokončení spouštění.
- V roce 2024 se v systemd plánuje ukončení podpory mechanismu omezení zdrojů cgroup v1, který byl převeden do stavu zastaralosti ve verzi systemd 248. Správcům se doporučuje včas postarat o přechod na cgroup v2 služby vázané na cgroup v1. Klíčovým rozdílem cgroups v2 od v1 je použití společné hierarchie cgroups pro všechny druhy zdrojů, místo oddělených hierarchií pro rozdělení CPU, regulaci paměti a pro vstup/výstup. Oddělené hierarchie vedou k obtížím při organizaci interakce mezi zpracovateli a k dodatečným nákladům na zdroje jádra při aplikaci pravidel na procesy zmiňované v různých hierarchiích.
- Ve druhé polovině roku 2023 se plánuje ukončení podpory oddělených hierarchií adresářů, když je /usr namontováno odděleně od kořenového adresáře nebo jsou odděleny adresáře /bin a /usr/bin, /lib a /usr/lib.
Zdroj: opennet.ru
