Po pięciu miesiącach prac opracowano wydanie menedżera systemu systemd 252. Kluczową zmianą w nowej wersji była integracja wsparcia dla zmodernizowanego procesu rozruchu, który umożliwia weryfikację za pomocą podpisów cyfrowych nie tylko jądra i bootloadera, ale także komponentów podstawowego środowiska systemowego.
Zap propuesta metoda zakłada wykorzystanie podczas rozruchu zunifikowanego obrazu jądra UKI (Unified Kernel Image), łączącego obsługę rozruchu jądra z UEFI (UEFI boot stub), obraz jądra Linux oraz ładowane do pamięci środowisko systemowe initrd, używane do początkowej inicjalizacji w fazie przed zamontowaniem głównego systemu plików. Układ UKI jest przedstawiony w postaci jednego pliku wykonywalnego w formacie PE, który może być ładowany przy użyciu tradycyjnych bootloaderów lub bezpośrednio wywoływany z firmware UEFI. Przy wywołaniu z UEFI możliwa jest weryfikacja integralności i autentyczności za pomocą podpisu cyfrowego nie tylko jądra, ale także zawartości initrd.
Do obliczeń parametrów rejestrów TPM PCR (Trusted Platform Module Platform Configuration Register), używanych do kontroli integralności i tworzenia podpisu cyfrowego obrazu UKI, do zestawu włączono nowe narzędzie systemd-measure. Używany w podpisie klucz publiczny i towarzyszące informacje o PCR mogą być wbudowane bezpośrednio w obraz rozruchowy UKI (klucz i podpis są przechowywane w pliku w formacie PE w polach ‘.pcrsig’ i ‘.pcrkey’) i wydobywane z niego przez zewnętrzne lub wewnętrzne narzędzia.
W tym celu dostosowano również narzędzia systemd-cryptsetup, systemd-cryptenroll i systemd-creds, za pomocą których można zapewnić powiązanie zaszyfrowanych partycji dyskowych z zatwierdzonym podpisem cyfrowym jądra (w takim przypadku dostęp do zaszyfrowanej partycji jest możliwy tylko wtedy, gdy obraz UKI przeszedł weryfikację według podpisu cyfrowego na podstawie parametrów umieszczonych w TPM).
Dodatkowo w zestawie znalazło się narzędzie systemd-pcrphase, które pozwala zarządzać powiązaniem różnych etapów rozruchu z parametrami umieszczanymi w pamięci kryptoprocesorów, które obsługują specyfikację TPM 2.0 (na przykład, klucz odszyfrowania partycji LUKS2 może być dostępny tylko w obrazie initrd i blokować dostęp do niego na późniejszych etapach rozruchu).
Niektóre inne zmiany:
- Domyślnie używana jest lokalizacja C.UTF-8, chyba że w ustawieniach określono inną lokalizację.
- Wprowadzono możliwość wykonania operacji pełnego wstępnego ustawienia usług („systemctl preset”) podczas pierwszego uruchomienia. Aby włączyć wstępne ustawienie podczas rozruchu, wymagana jest kompilacja z opcją „-Dfirst-boot-full-preset”, jednak w przyszłych wersjach planuje się aktywację tego domyślnie.
- W jednostkach zarządzania użytkownikami wprowadzono kontroler zasobów CPU, co pozwoliło na zastosowanie ustawień CPUWeight do wszystkich jednostek slice, używanych do podziału systemu (app.slice, background.slice, session.slice) w celu izolacji zasobów pomiędzy różnymi usługami użytkowników, które konkurują o zasoby CPU. W CPUWeight wprowadzono również wsparcie dla wartości „idle”, aby aktywować odpowiedni tryb przydzielania zasobów.
- W jednorazowych („transient”) jednostkach oraz w narzędziu systemd-repart zezwolono na nadpisywanie ustawień poprzez tworzenie plików drop-in w katalogu /etc/systemd/system/nazwa.d/.
- Dla obrazów systemowych wprowadzono flagę wskazującą zakończenie wsparcia (‘support-ended’), określając ten fakt na podstawie wartości nowego parametru „SUPPORT_END=” w pliku /etc/os-release.
- Dodano ustawienia „ConditionCredential=” i „AssertCredential=”, które można wykorzystać do ignorowania lub awaryjnego zamykania jednostek przy braku określonych danych uwierzytelniających w systemie.
- W plikach system.conf i user.conf dodano ustawienia „DefaultSmackProcessLabel=” oraz „DefaultDeviceTimeoutSec=” do określenia poziomu bezpieczeństwa SMACK oraz domyślnego limitu czasu aktywacji jednostki.
- W ustawieniach „ConditionFirmware=” oraz „AssertFirmware=” dodano możliwość wskazania poszczególnych pól SMBIOS, na przykład do uruchamiania jednostki tylko w przypadku, gdy pole /sys/class/dmi/id/board_name zawiera wartość „Custom Board”, można wskazać „ConditionFirmware=smbios-field(board_name = „Custom Board”)”.
- W procesie inicjalizacji (PID 1) dodano możliwość importowania danych uwierzytelniających z pól SMBIOS (Typ 11, „ciągi producenta OEM”) oprócz ich definiowania za pomocą qemu_fwcfg, co ułatwia dostarczanie danych uwierzytelniających maszyn wirtualnych i pozwala uniknąć użycia zewnętrznych narzędzi, takich jak cloud-init i ignition.
- Podczas zamykania systemu zmieniono logikę odmontowywania wirtualnych systemów plików (proc, sys) oraz zapewniono zapisanie informacji o procesach, które blokują odmontowanie systemów plików w logach.
- W filtrze wywołań systemowych (SystemCallFilter) domyślnie zezwolono na dostęp do wywołania systemowego riscv_flush_icache.
- Do bootloadera sd-boot dodano możliwość uruchamiania w trybie mieszanym, w którym 64-bitowe jądro Linux jest uruchamiane z 32-bitowego firmware'UEFI. Dodano eksperymentalną opcję automatycznego zastosowania kluczy SecureBoot z plików znalezionych w ESP (partycja systemowa EFI).
- Do narzędzia bootctl dodano nowe opcje „—all-architectures” do instalacji plików binarnych dla wszystkich obsługiwanych architektur EFI, „—root=” i „—image=” do pracy z katalogiem lub obrazem dysku, „—install-source=” do określenia źródła do instalacji, „—efi-boot-option-description=” do zarządzania nazwami wpisów rozruchowych.
- W narzędziu systemctl dodano polecenie ‘list-automounts’ do wyświetlania listy automatycznie zamontowanych katalogów oraz opcję „—image=” do wykonywania poleceń w kontekście podanego obrazu dysku. Do poleceń ‘show’ i ‘status’ dodano opcje „—state=” i „—type=”.
- W systemd-networkd dodano opcje „TCPCongestionControlAlgorithm=” do wyboru algorytmu zarządzania przeciążeniem TCP, „KeepFileDescriptor=” do zachowania deskryptora pliku interfejsów TUN/TAP, „NetLabel=” do ustawiania etykiet NetLabel, „RapidCommit=” do przyspieszania konfiguracji przez DHCPv6 (RFC 3315). W parametrze „RouteTable=” zezwolono na podanie nazw tabel routingu.
- W systemd-nspawn zezwolono na używanie względnych ścieżek plików w opcjach „—bind=” i „—overlay=”. Do opcji „—bind=” dodano wsparcie dla parametru ‘rootidmap’ do powiązania identyfikatora użytkownika root w kontenerze z właścicielem zamontowanego katalogu po stronie systemu gospodarza.
- W systemd-resolved jako backend do szyfrowania domyślnie używany jest pakiet OpenSSL (wsparcie dla gnutls pozostaje jako opcja). Nieobsługiwane algorytmy DNSSEC są teraz traktowane jako niebezpieczne, zamiast zwracać błąd (SERVFAIL).
- W systemd-sysusers, systemd-tmpfiles i systemd-sysctl wprowadzono możliwość przekazywania ustawień przez mechanizm przechowywania danych uwierzytelniających.
- Do narzędzia systemd-analyze dodano polecenie ‘compare-versions’ do porównywania ciągów z numerami wersji (analogicznie do ‘rpmdev-vercmp’ i ‘dpkg —compare-versions’). Do polecenia ‘systemd-analyze dump’ dodano możliwość filtrowania jednostek według maski.
- W przypadku wyboru wieloetapowego trybu uśpienia (suspend-then-hibernate, przejście w tryb uśpienia po trybie oczekiwania), czas spędzony w trybie oczekiwania jest teraz dobierany na podstawie prognozy pozostałego czasu pracy na baterii. Natychmiastowe przejście w tryb uśpienia następuje, gdy pozostało mniej niż 5% naładowania akumulatora.
- Do ‘journalctl’ dodano nowy tryb wyjścia „-o short-delta”, który pokazuje różnicę w czasie pomiędzy różnymi komunikatami w logu.
- W systemd-repart dodano wsparcie dla tworzenia partycji z systemem plików Squashfs oraz partycji dla dm-verity, w tym z cyfrowymi podpisami.
- W systemd-logind dodano opcję „StopIdleSessionSec=”, która kończy nieaktywną sesję po upływie określonego limitu czasu.
- W systemd-cryptenroll dodano opcję „—unlock-key-file=”, która umożliwia wydobycie klucza deszyfrującego z pliku, zamiast z wyjścia zapytania do użytkownika.
- Zrealizowano możliwość uruchamiania narzędzia systemd-growfs w środowiskach bez udev.
- W systemd-backlight poprawiono wsparcie dla systemów z wieloma kartami graficznymi.
- Licencja na przykłady kodu podane w dokumentacji została zmieniona z CC0 na MIT-0.
Zmiany naruszające kompatybilność:
- Podczas sprawdzania numeru wersji jądra za pomocą dyrektywy ConditionKernelVersion w operatorach ‘=’ i ‘!=’ teraz stosowane jest proste porównanie tekstowe, a jeśli operator porównania w ogóle nie jest podany, może być stosowane dopasowanie według wzoru globowego z użyciem symboli ‘*’, ‘?’ oraz ‘[‘, ‘]’. Do porównania wersji w stylu funkcji stverscmp() należy używać operatorów ‘’, ‘=’.
- Etykieta SELinux, stosowana do sprawdzania dostępu z pliku jednostkowego, jest teraz odczytywana na etapie ładowania pliku, a nie w momencie sprawdzania dostępu.
- Warunek „ConditionFirstBoot” teraz wyzwala się przy pierwszym uruchomieniu systemu tylko w trakcie etapu rozruchu i zwraca „false” przy wywoływaniu jednostek po zakończeniu rozruchu.
- W 2024 roku systemd planuje zaprzestać wsparcia dla mechanizmu ograniczenia zasobów cgroup v1, które przeszło do kategorii przestarzałych w wydaniu systemd 248. Administratorzy są zachęcani do wcześniejszego zajęcia się migracją usług opartych na cgroup v1 do cgroup v2. Kluczową różnicą między cgroups v2 a v1 jest zastosowanie wspólnej hierarchii cgroup dla wszystkich typów zasobów, zamiast osobnych hierarchii dla alokacji zasobów CPU, zarządzania pamięcią oraz I/O. Osobne hierarchie prowadzą do trudności w organizacji współpracy między handlerami oraz do dodatkowych kosztów zasobów rdzenia przy stosowaniu reguł dla procesów odnoszących się do różnych hierarchii.
- W drugiej połowie 2023 roku planuje się zaprzestanie wsparcia dla osobnych hierarchii katalogów, kiedy /usr jest montowane oddzielnie od głównego katalogu lub gdy katalogi /bin i /usr/bin, /lib i /usr/lib są oddzielone.
Źródło: opennet.ru
