Po trzech miesiącach prac rozwojowych zaprezentowano wydanie menedżera systemowego systemd 249. W nowej wersji umożliwiono określanie użytkowników/grup w formacie JSON, ustabilizowano protokół Journal, uproszczono organizację ładowania zamieniających się dysków, dodano możliwość powiązania programów BPF z serwisami, zrealizowano mapowanie identyfikatorów użytkowników w zamontowanych partycjach, a także zaproponowano szereg nowych ustawień sieciowych oraz możliwości uruchamiania kontenerów.
Główne zmiany:
- Dokumentowany jest protokół Journal, który można stosować w klientach zamiast protokołu syslog do lokalnej dostawy logów. Protokół Journal istnieje od dłuższego czasu i już jest wykorzystywany w niektórych bibliotekach klienckich, niemniej jednak jego oficjalne wsparcie ogłoszono dopiero teraz.
- W userdb i nss-systemd zapewniono odczyt dodatkowych definicji użytkowników umieszczonych w katalogach /etc/userdb/, /run/userdb/, /run/host/userdb/ i /usr/lib/userdb/, zdefiniowanych w formacie JSON. Zaznacza się, że wskazana możliwość zapewni dodatkowy mechanizm tworzenia użytkowników w systemie, zapewniając pełną integrację z NSS i /etc/shadow. Wsparcie dla formatu JSON dla zapisów użytkowników/grup również pozwoli na przypinanie do użytkowników różnych parametrów zarządzania zasobami i inne ustawienia, które rozpoznają pam_systemd oraz systemd-logind.
- W nss-systemd zapewniono syntezę zapisów użytkownika/grupy w /etc/shadow z wykorzystaniem haszowanych haseł z systemd-homed.
- Zrealizowano mechanizm, który upraszcza organizację aktualizacji przy użyciu zamieniających się dysków (jeden dysk aktywny, a drugi zapasowy — aktualizacja jest kopiowana na zapasowy dysk, po czym staje się on aktywny). Jeśli w obrazie dysku znajdują się dwa partycje root lub /usr, a udev nie zidentyfikował parametru 'root=' lub przetwarzane są obrazy dysków wskazane za pomocą opcji '—image' w narzędziach systemd-nspawn i systemd-dissect, partycja do załadowania może być obliczona poprzez porównanie etykiet GPT (zakłada się, że w etykiecie GPT wymieniony jest numer wersji zawartości partycji, a systemd wybierze partycję z nowszymi zmianami).
- W plikach usług dodano ustawienie BPFProgram, za pomocą którego można zorganizować ładowanie programów BPF do jądra i zarządzanie nimi z powiązaniem do określonych usług systemd.
- W systemd-fstab-generator i systemd-repart dodano możliwość ładowania z dysków, na których znajduje się tylko partycja /usr, a brakuje partycji głównej (partycja główna zostanie wygenerowana przez narzędzie systemd-repart podczas pierwszego uruchomienia).
- W systemd-nspawn opcja „—private-user-chown” została zastąpiona bardziej uniwersalną wersją „—private-user-ownership”, która może przyjmować wartości „chown” jako ekwiwalent „—private-user-chown”, „off” do wyłączenia starego ustawienia, „map” do mapowania identyfikatorów użytkowników w zamontowanych systemach plików oraz „auto” do wyboru „map” w przypadku dostępności wymaganej funkcjonalności w jądrze (5.12+) lub powrotu do rekurencyjnego wywołania „chown” w przeciwnym razie. Dzięki mapowaniu można dopasować pliki jednego użytkownika w zamontowanej obcej partycji do innego użytkownika w bieżącym systemie, co ułatwia współdzielenie plików przez różnych użytkowników. W mechanizmie przenośnych katalogów domowych systemd-homed mapowanie umożliwi użytkownikom przenoszenie swoich katalogów domowych na zewnętrzne nośniki i ich używanie na różnych komputerach, w których układ identyfikatorów użytkowników się nie zgadza.
- W systemd-nspawn w opcji „—private-user” teraz można używać wartości „identity” do bezpośredniego odwzorowywania identyfikatorów użytkowników podczas konfigurowania przestrzeni nazw (user namespace), tzn. UID 0 i UID 1 w kontenerze będą odwzorowywane na UID 0 i UID 1 po stronie hosta, aby zredukować wektory ataków (kontener uzyska możliwości procesu tylko w swoim własnym przestrzeni nazw).
- W systemd-nspawn dodano opcję „—bind-user” do przekazywania do kontenera konta użytkownika, które już istnieje w środowisku hosta (do kontenera montowany jest katalog domowy, dodawany jest wpis użytkownika/grupy i wykonywane jest mapowanie UID między kontenerem a środowiskiem hosta).
- W systemd-ask-password i systemd-sysusers dodano wsparcie dla żądania ustawianych haseł (passwd.hashed-password. i passwd.plaintext-password.) przy pomocy nowego mechanizmu bezpiecznej transmisji danych poufnych wprowadzonym w wersji systemd 247, wykorzystującego pliki tymczasowe w oddzielnym katalogu. Domyślnie dane uwierzytelniające są przyjmowane od procesu z PID1, który otrzymuje je np. od menedżera kontenerów, co umożliwia konfigurację hasła użytkownika przy pierwszym uruchomieniu.
- W systemd-firstboot dodano wsparcie dla wykorzystania mechanizmu bezpiecznej transmisji danych poufnych do żądania różnych parametrów systemowych, co może być używane do inicjalizacji ustawień systemowych przy pierwszym uruchomieniu obrazu kontenera, w którym brakuje niezbędnych ustawień w katalogu /etc.
- W procesie PID 1 podczas uruchamiania zapewniono wyświetlanie jednocześnie nazwy i opisu jednostki. Wyjście można zmienić za pomocą parametru „StatusUnitFormat=combined” w system.conf lub opcji wiersza poleceń jądra „systemd.status-unit-format=combined”.
- Do narzędzi systemd-machine-id-setup i systemd-repart dodano opcję „—image” do przesyłania pliku z identyfikatorem maszyny do obrazów dysków lub do zwiększania rozmiaru obrazu dysku.
- Do pliku konfiguracyjnego partycji używanego przez narzędzie systemd-repart dodano parametr MakeDirectories, który można wykorzystać do tworzenia dowolnych katalogów w tworzonym systemie plików na etapie przed odzwierciedleniem w tabeli partycji (na przykład do tworzenia w katalogu głównym katalogów dla punktów montowania, aby móc natychmiast zamontować partycję w trybie tylko do odczytu). Do zarządzania flagami GPT w tworzonych partycjach dodano odpowiednie parametry Flags, ReadOnly i NoAuto. W parametrze CopyBlocks wprowadzono wartość „auto” do automatycznego wyboru aktualnej partycji rozruchowej jako źródła podczas kopiowania bloków (na przykład, gdy konieczne jest przeniesienie własnej partycji głównej na nośnik).
- W GPT wprowadzono flagę „grow-file-system”, analogiczną do opcji montowania x-systemd.growfs, która umożliwia automatyczne rozszerzanie rozmiaru systemu plików do granic urządzenia blokowego, jeśli rozmiar systemu plików jest mniejszy od partycji. Flaga jest stosowana do systemów plików Ext3, XFS i Btrfs i może być stosowana do automatycznie wykrywanych partycji. Flaga domyślnie jest włączona dla partycji, które są zapisywalne i są automatycznie tworzone przez systemd-repart. W celu skonfigurowania flagi w systemd-repart dodano opcję GrowFileSystem.
- W pliku /etc/os-release dodano wsparcie dla nowych zmiennych IMAGE_VERSION i IMAGE_ID, które definiują wersję i identyfikator atomowo aktualizowanych obrazów. Aby wstawić określone wartości w różne polecenia, zaproponowano specyfikatory %M i %A.
- Do narzędzia portablectl dodano parametr „—extension”, który aktywuje przenośne obrazy rozszerzenia systemu (na przykład, za ich pomocą można rozpowszechniać obrazy z dodatkowymi usługami, które są integrowane w główną partycję).
- W narzędziu systemd-coredump zapewniono ekstrakcję informacji ELF build-id podczas tworzenia zrzutu rdzenia procesu, co może być przydatne do określenia, do jakiego pakietu należy proces z błędem, jeśli informacje o nazwie i wersji pakietów deb lub rpm zostały wbudowane w pliki ELF.
- W udev dodano nową bazę sprzętową dla urządzeń FireWire (IEEE 1394).
- W udev w schemacie wyboru nazw interfejsów sieciowych „net_id” dodano trzy zmiany, które naruszają zgodność wstecz: nieprawidłowe znaki w nazwach interfejsów są teraz zastępowane znakiem „_”; nazwy gniazd PCI hotplug dla systemów s390 są przetwarzane w postaci hexadecymalnej; do 65535 wbudowanych urządzeń PCI jest dozwolone (wcześniej numery powyżej 16383 były blokowane).
- W systemd-resolved do listy NTA (Negative Trust Anchors) dodano domenę „home.arpa”, zalecaną dla lokalnych sieci domowych, ale nieużywaną w DNSSEC.
- W parametrze CPAffinity zapewniono analizę specyfikatorów „%”.
- Do plików „.network” dodano parametr ManageForeignRoutingPolicyRules, który można wykorzystać do wyłączenia przetwarzania w systemd-networkd polityk routingu zewnętrznych.
- Do plików „.network” dodano parametr RequiredFamilyForOnline, który określa obecność adresu IPv4 lub IPv6 jako sygnał, że interfejs sieciowy jest w stanie „online”. W networkctl zapewniono wyświetlanie stanu „online” dla każdego łącza.
- W plikach «.network» dodano parametr OutgoingInterface, który określa wyjściowe interfejsy podczas konfigurowania mostków sieciowych.
- W plikach «.network» dodano parametr Group, który pozwala skonfigurować grupę Multipath dla wpisów w sekcjach «[NextHop]».
- W systemd-network-wait-online dodano opcje «-4» i «-6» do ograniczenia oczekiwania na połączenie tylko do IPv4 lub IPv6.
- Do ustawień serwera DHCP dodano parametr RelayTarget, który przełącza serwer w tryb DHCP Relay. Dodatkowe opcje konfiguracyjne dla relayu DHCP to RelayAgentCircuitId i RelayAgentRemoteId.
- W serwerze DHCP dodano parametr ServerAddress, który pozwala jawnie ustawić adres IP serwera (w przeciwnym razie adres jest wybierany automatycznie).
- W serwerze DHCP wprowadzono sekcję [DHCPServerStaticLease], która pozwala na ustawienie statycznych powiązań adresów (dzierżaw DHCP), wskazując powiązania stałych adresów IP do adresów MAC i odwrotnie.
- W ustawieniu RestrictAddressFamilies wprowadzono wsparcie dla wartości «none», w przypadku której usługa nie otrzyma soketów żadnego rodzaju rodziny adresów.
- W plikach «.network» w sekcjach [Address], [DHCPv6PrefixDelegation] i [IPv6Prefix] wprowadzono wsparcie dla konfigurowania RouteMetric, które pozwala na określenie metryki dla prefiksu trasy utworzonej dla wskazanego adresu.
- W nss-myhostname i systemd-resolved zapewniono syntezę rekordów DNS z adresami dla hostów o specjalnej nazwie «_outbound», dla których zawsze przydzielany jest lokalny adres IP, wybrany zgodnie z domyślnymi trasami używanymi dla połączeń wychodzących.
- Do plików .network w sekcji «[DHCPv4]» dodano aktywną domyślnie konfigurację RoutesToNTP, która nakazuje dodanie oddzielnej trasy przez bieżący interfejs sieciowy w celu uzyskania dostępu do adresu serwera NTP, uzyskanego dla tego interfejsu za pomocą DHCP (analogicznie do konfiguracji DNS, co gwarantuje, że ruch do serwera NTP będzie kierowany przez interfejs, przez który ten adres został uzyskany).
- Dodano ustawienia SocketBindAllow i SocketBindDeny do zarządzania dostępem do soketów związanych z bieżącą usługą.
- Dla plików jednostkowych wprowadzono warunkową konfigurację ConditionFirmware, która pozwala na tworzenie testów oceniających funkcje oprogramowania układowego, takie jak działanie na systemach UEFI i device.tree, a także sprawdzanie zgodności z określonymi możliwościami device-tree.
- Dodano opcję ConditionOSRelease do sprawdzania pól w pliku /etc/os-release. Przy określaniu warunków sprawdzania wartości pól dozwolone są operatory „=”, „!=”, „<”, „=”, „>”.
- W narzędziu hostnamectl polecenia typu „get-xyz” i „set-xyz” zostały pozbawione prefiksów „get” i „set”, na przykład zamiast „hostnamectl get-hostname” i „hostnamectl set-hostname” można użyć polecenia „hostnamectl hostname”, a przypisanie wartości określa się podając dodatkowy argument („hostnamectl hostname value”). Obsługa starych poleceń została zachowana dla zapewnienia zgodności.
- W narzędziu systemd-detect-virt i konfiguracji ConditionVirtualization zapewniono poprawną identyfikację środowisk Amazon EC2.
- Ustawienie LogLevelMax w plikach jednostek teraz dotyczy nie tylko wiadomości logów tworzonych przez usługę, ale także wiadomości procesu PID 1, w których wspomniana jest usługa.
- Została dodana możliwość włączenia danych SBAT (UEFI Secure Boot Advanced Targeting) w plikach systemd-boot EFI PE.
- W /etc/crypttab wprowadzono nowe opcje „headless” i „password-echo” — pierwsza pozwala pominąć wszystkie operacje związane z interaktywnym zapytaniem o hasła i PIN-y użytkownika, a druga umożliwia skonfigurowanie metody wyświetlania wpisywanego hasła (nic nie pokazywać, pokazywać znak po znaku lub wyświetlać gwiazdki). W systemd-ask-password dodano opcję „—echo” do podobnych celów.
- W systemd-cryptenroll, systemd-cryptsetup i systemd-homed rozszerzono wsparcie dla odblokowywania zaszyfrowanych partycji LUKS2 za pomocą tokenów FIDO2. Dodano nowe opcje „—fido2-with-user-presence”, „—fido2-with-user-verification” i „—fido2-with-client-pin” do zarządzania weryfikacją fizycznej obecności użytkownika, weryfikacją i koniecznością wprowadzenia PIN-u.
- W systemd-journal-gatewayd dodano opcje „—user”, „—system”, „—merge” i „—file”, analogiczne do tych samych opcji w journalctl.
- Oprócz bezpośrednich zależności między jednostkami, określanych przez parametry OnFailure i Slice, dodano wsparcie dla niejawnych odwrotnych zależności OnFailureOf i SliceOf, które mogą być przydatne na przykład do określania wszystkich jednostek wchodzących w skład slice.
- Dodano nowe typy zależności między jednostkami: OnSuccess i OnSuccessOf (przeciwieństwo OnFailure, wywoływane przy pomyślnym zakończeniu); PropagatesStopTo i StopPropagatedFrom (pozwalają przekazać zdarzenie zatrzymania jednostki innej jednostce); Upholds i UpheldBy (alternatywa dla Restart).
- W narzędziu systemd-ask-password pojawiła się opcja „—emoji” do zarządzania wyświetlaniem symbolu kłódki (🔐) w wierszu wejścia hasła.
- Dodano dokumentację na temat struktury drzewa kodów źródłowych systemd.
- Dla jednostek dodano właściwość MemoryAvailable, która pokazuje, ile pamięci pozostaje jednostce do osiągnięcia limitu ustalonego za pomocą parametrów MemoryMax, MemoryHigh lub MemoryAvailable.
Źródło: opennet.ru
