Wydanie menedżera systemu systemd 252 z obsługą UKI (Unified Kernel Image).

Po pięciu miesiącach prac rozwojowych zaprezentowano wydanie menedżera systemu systemd 252. Kluczową zmianą w nowej wersji była integracja obsługi zmodernizowanego procesu rozruchu, który umożliwia weryfikację nie tylko jądra i programu ładującego, ale także komponentów podstawowego środowiska systemowego wykorzystującego podpisy cyfrowe.

Proponowana metoda polega na wykorzystaniu podczas ładowania ujednoliconego obrazu jądra UKI (Unified Kernel Image), który łączy w sobie procedurę ładowania jądra z UEFI (odgałęzienie rozruchowe UEFI), obraz jądra Linuksa oraz ładowane do pamięci środowisko systemowe initrd, wykorzystywane do wstępnej inicjalizacji na etapie przed zamontowaniem głównego FS. Obraz UKI jest spakowany jako pojedynczy plik wykonywalny w formacie PE, który można załadować za pomocą tradycyjnych programów ładujących lub wywołać bezpośrednio z oprogramowania układowego UEFI. Po wywołaniu z UEFI można sprawdzić integralność i niezawodność podpisu cyfrowego nie tylko jądra, ale także zawartości pliku initrd.

Aby obliczyć parametry rejestrów TPM PCR (Trusted Platform Module Platform Configuration Register) używanych do monitorowania integralności i generowania podpisu cyfrowego obrazu UKI, dołączono nowy narzędzie systemd-measure. Klucz publiczny użyty w podpisie i towarzyszące mu informacje PCR można osadzić bezpośrednio w obrazie startowym UKI (klucz i podpis są zapisywane w pliku PE w polach „.pcrsig” i „.pcrkey”) i wyodrębnić z niego za pomocą zewnętrznego lub narzędzia wewnętrzne.

W szczególności do korzystania z tych informacji przystosowano narzędzia systemd-cryptsetup, systemd-cryptenroll i systemd-creds, dzięki którym można mieć pewność, że zaszyfrowane partycje dysku są powiązane z cyfrowo podpisanym jądrem (w tym przypadku dostęp do zaszyfrowanej partycji udostępniana jest wyłącznie w przypadku, gdy obraz UKI przeszedł weryfikację podpisem cyfrowym na podstawie parametrów znajdujących się w TPM).

Dodatkowo dołączone jest narzędzie systemd-pcrphase, które pozwala kontrolować powiązanie różnych etapów rozruchu z parametrami znajdującymi się w pamięci kryptoprocesorów obsługujących specyfikację TPM 2.0 (na przykład możesz udostępnić klucz deszyfrujący partycję LUKS2 tylko w obraz initrd i zablokuj dostęp do niego na późniejszych etapach pobierania).

Niektóre inne zmiany:

  • Zapewnia, że ​​domyślne ustawienia regionalne to C.UTF-8, chyba że w ustawieniach określono inne ustawienia regionalne.
  • Możliwe jest teraz wykonanie pełnej operacji wstępnej usługi („preset systemctl”) podczas pierwszego rozruchu. Włączenie ustawień wstępnych podczas uruchamiania wymaga kompilacji z opcją „-Dfirst-boot-full-preset”, ale planuje się, że będzie ona domyślnie włączona w przyszłych wersjach.
  • Jednostki zarządzania użytkownikami obejmują kontroler zasobów procesora, co umożliwiło zapewnienie, że ustawienia CPUWeight zostaną zastosowane do wszystkich jednostek plasterków używanych do podziału systemu na części (app.slice, tło.slice, session.slice) w celu odizolowania zasobów pomiędzy różne usługi użytkownika, konkurujące o zasoby procesora. CPUWeight obsługuje również wartość „bezczynności”, aby aktywować odpowiedni tryb udostępniania zasobów.
  • W jednostkach tymczasowych („przejściowych”) i w narzędziu systemd-repart zastępowanie ustawień jest dozwolone poprzez utworzenie plików rozwijanych w katalogu /etc/systemd/system/name.d/.
  • Dla obrazów systemowych ustawiana jest flaga support-ended, ustalająca ten fakt na podstawie wartości nowego parametru „SUPPORT_END=” w pliku /etc/os-release.
  • Dodano ustawienia „ConditionCredential=” i „AssertCredential=”, których można użyć do ignorowania lub zawieszania jednostek, jeśli w systemie nie ma określonych poświadczeń.
  • Dodano ustawienia „DefaultSmackProcessLabel=” i „DefaultDeviceTimeoutSec=” do plików system.conf i user.conf w celu zdefiniowania domyślnego poziomu zabezpieczeń SMACK i limitu czasu aktywacji jednostki.
  • W ustawieniach „ConditionFirmware=” i „AssertFirmware=” dodano możliwość określenia poszczególnych pól SMBIOS, np. uruchomienia jednostki tylko wtedy, gdy pole /sys/class/dmi/id/board_name zawiera wartość „Custom Board”, możesz określić „ConditionFirmware=smbios” -field(board_name = „Custom Board”)”.
  • Podczas procesu inicjalizacji (PID 1) dodano możliwość importowania poświadczeń z pól SMBIOS (typ 11, „ciągi dostawcy OEM”) oprócz ich definicji poprzez qemu_fwcfg, co upraszcza dostarczanie poświadczeń do maszyn wirtualnych i eliminuje potrzeba narzędzi innych firm, takich jak Cloud -init i zapłon.
  • Podczas zamykania systemu zmieniona została logika odmontowywania wirtualnych systemów plików (proc, sys) i w logu zapisywana jest informacja o procesach blokujących odmontowywanie systemów plików.
  • Filtr wywołań systemowych (SystemCallFilter) domyślnie umożliwia dostęp do wywołania systemowego riscv_flush_icache.
  • Program ładujący sd-boot dodaje możliwość uruchamiania w trybie mieszanym, w którym 64-bitowe jądro Linuksa działa z 32-bitowego oprogramowania sprzętowego UEFI. Dodano eksperymentalną możliwość automatycznego stosowania kluczy SecureBoot z plików znalezionych w ESP (partycja systemowa EFI).
  • Do narzędzia bootctl dodano nowe opcje: „—all-architectures” do instalowania plików binarnych dla wszystkich obsługiwanych architektur EFI, „—root=” i „—image=” do pracy z katalogiem lub obrazem dysku, „—install-source =” do definiowania źródła instalacji, „-efi-boot-option-description=" do kontrolowania nazw wpisów rozruchowych.
  • Do narzędzia systemctl dodano polecenie „list-automounts”, umożliwiające wyświetlenie listy automatycznie zamontowanych katalogów oraz opcję „--image=” umożliwiającą wykonywanie poleceń w odniesieniu do określonego obrazu dysku. Do poleceń „show” i „status” dodano opcje „--state=” i „--type=”.
  • systemd-networkd dodano opcje „TCPCongestionControlAlgorithm=” do wyboru algorytmu kontroli przeciążenia TCP, „KeepFileDescriptor=” do zapisania deskryptora pliku interfejsów TUN/TAP, „NetLabel=” do ustawienia NetLabels, „RapidCommit=” do przyspieszenia konfiguracji poprzez DHCPv6 (RFC 3315). Parametr „RouteTable=” umożliwia określenie nazw tablic routingu.
  • systemd-nspawn pozwala na użycie względnych ścieżek plików w opcjach "--bind=" i "--overlay=". Dodano obsługę parametru „rootidmap” do opcji „--bind=" w celu powiązania identyfikatora użytkownika root w kontenerze z właścicielem zamontowanego katalogu po stronie hosta.
  • systemd-resolved domyślnie używa OpenSSL jako narzędzia szyfrowania (obsługa gnutls jest zachowana jako opcja). Nieobsługiwane algorytmy DNSSEC są teraz traktowane jako niebezpieczne i nie zwracają błędu (SERVFAIL).
  • systemd-sysusers, systemd-tmpfiles i systemd-sysctl implementują możliwość przesyłania ustawień poprzez mechanizm przechowywania danych uwierzytelniających.
  • Do narzędzia systemd-analyze dodano polecenie „compare-versions” w celu porównania ciągów znaków z numerami wersji (podobnie do „rpmdev-vercmp” i „dpkg --compare-versions”). Do polecenia „systemd-analyze dump” dodano możliwość filtrowania jednostek według maski.
  • Po wybraniu wieloetapowego trybu uśpienia (zawieszenie, a następnie hibernacja) czas spędzony w trybie gotowości jest teraz wybierany na podstawie prognozy pozostałego czasu pracy baterii. Natychmiastowe przejście w tryb uśpienia następuje, gdy poziom naładowania akumulatora wynosi mniej niż 5%.
  • Do dziennika „journalctl” dodano nowy tryb wyjściowy „-o short-delta”, wyświetlający różnicę czasu pomiędzy różnymi komunikatami w dzienniku.
  • systemd-repart dodaje obsługę tworzenia partycji z systemem plików Squashfs i partycji dla dm-verity, w tym z podpisami cyfrowymi.
  • Dodano ustawienie „StopIdleSessionSec=" do systemd-logind, aby zakończyć nieaktywną sesję po określonym czasie oczekiwania.
  • Systemd-cryptenroll dodał opcję „--unlock-key-file=” umożliwiającą wyodrębnienie klucza deszyfrującego z pliku zamiast monitowania użytkownika.
  • Można teraz uruchomić narzędzie systemd-growfs w środowiskach bez udev.
  • systemd-backlight poprawiło obsługę systemów z wieloma kartami graficznymi.
  • Licencja na przykłady kodu zawarte w dokumentacji została zmieniona z CC0 na MIT-0.

Zmiany psujące kompatybilność:

  • Podczas sprawdzania numeru wersji jądra za pomocą dyrektywy ConditionKernelVersion, w operatorach „=” i „!=” używane jest teraz proste porównanie ciągów znaków, a jeśli operator porównania nie jest w ogóle określony, można zastosować dopasowanie maski globalnej za pomocą znaki „*”, „?” i „[”, „]”. Aby porównać wersje w stylu funkcji stverscmp(), należy użyć operatorów „”, „=”.
  • Znacznik SELinux używany do sprawdzania dostępu z pliku jednostkowego jest teraz odczytywany w momencie ładowania pliku, a nie w momencie sprawdzania dostępu.
  • Warunek „ConditionFirstBoot” jest teraz wyzwalany przy pierwszym uruchomieniu systemu tylko bezpośrednio na etapie rozruchu i zwraca wartość „false” przy wywoływaniu jednostek po zakończeniu rozruchu.
  • W 2024 r. systemd planuje zaprzestać obsługi mechanizmu ograniczania zasobów cgroup v1, który został wycofany w wersji systemd 248. Administratorom zaleca się zachowanie ostrożności przed migracją usług opartych na cgroup v2 do cgroup v1. Kluczową różnicą między cgroups v2 i v1 jest użycie wspólnej hierarchii cgroups dla wszystkich typów zasobów zamiast oddzielnych hierarchii do alokacji zasobów procesora, regulowania zużycia pamięci i operacji we/wy. Oddzielne hierarchie prowadzą do trudności w organizowaniu interakcji między programami obsługi i do dodatkowych kosztów zasobów jądra podczas stosowania reguł dla procesu, do którego odwołują się różne hierarchie.
  • W drugiej połowie 2023 roku planujemy zakończyć obsługę podzielonych hierarchii katalogów, w których /usr jest montowany oddzielnie od katalogu głównego lub /bin i /usr/bin, /lib i /usr/lib są oddzielane.

Źródło: opennet.ru

Dodaj komentarz