Veröffentlichung des Systemmanagers systemd 252 mit Unterstützung für UKI (Unified Kernel Image)

Nach fünf Monaten Entwicklung wurde die Veröffentlichung des systemd 252 veröffentlicht. Ein zentrales Merkmal der neuen Version ist die Integration der Unterstützung für einen modernisierten Bootprozess, der es ermöglicht, digitale Signaturen nicht nur für den Kernel und den Bootloader, sondern auch für die Komponenten der Basis-Systemumgebung zu überprüfen.

Die vorgeschlagene Methode sieht die Verwendung eines einheitlichen Kernel-Images (UKI - Unified Kernel Image) beim Booten vor, das den Boot-Manager für den Kernel aus UEFI (UEFI Boot Stub), das Linux-Kernel-Abbild und die in den Speicher geladene Systemumgebung initrd kombiniert, die für die initiale Initialisierung vor der Montage des Hauptdateisystems verwendet wird. Das UKI-Image wird als eine ausführbare Datei im PE-Format gestaltet, die entweder von traditionellen Bootloadern geladen oder direkt aus der UEFI-Firmware aufgerufen werden kann. Bei einem Aufruf aus UEFI besteht die Möglichkeit, die Integrität und Authentizität sowohl des Kernels als auch des Inhalts von initrd durch digitale Signaturen zu überprüfen.

Zur Berechnung der Parameter der TPM PCR (Trusted Platform Module Platform Configuration Register), die zur Integritätsüberprüfung und zur Erstellung einer digitalen Signatur des UKI-Images verwendet werden, wurde das neue Tool systemd-measure integriert. Der in der Signatur verwendete öffentliche Schlüssel und die zugehörigen Informationen über die PCR können direkt in das Boot-Image des UKI eingebettet werden (der Schlüssel und die Signatur werden in einer Datei im PE-Format in den Feldern '.pcrsig' und '.pcrkey' gespeichert) und können von externen oder internen Tools extrahiert werden.

Unter anderem wurden die Tools systemd-cryptsetup, systemd-cryptenroll und systemd-creds angepasst, um diese Informationen zu nutzen. Mit ihnen kann die Bindung von verschlüsselten Festplattenteilen an einen von einer digitalen Signatur geprüften Kernel gewährleistet werden (in diesem Fall wird der Zugriff auf den verschlüsselten Teil nur gewährt, wenn das UKI-Image die Überprüfung der digitalen Signatur basierend auf den im TPM gespeicherten Parametern bestanden hat).

Zusätzlich ist das Tool systemd-pcrphase enthalten, das die Verwaltung der Bindung verschiedener Boot-Stufen an Parameter ermöglicht, die im Speicher der Kryptoprozessoren abgelegt sind, die die TPM 2.0-Spezifikation unterstützen. So kann zum Beispiel der Schlüssel zur Entschlüsselung des LUKS2-Volumes nur im initrd-Image verfügbar gemacht werden, wobei der Zugriff darauf in späteren Boot-Stufen blockiert wird.

Einige weitere Änderungen:

  • Standardmäßig wird die Locale C.UTF-8 verwendet, es sei denn, eine andere Locale ist in den Einstellungen definiert.
  • Es wurde die Möglichkeit implementiert, die vollständige Voreinstellung von Diensten («systemctl preset») während des ersten Bootvorgangs durchzuführen. Um die Voreinstellung beim Booten zu aktivieren, ist eine Kompilierung mit der Option «-Dfirst-boot-full-preset» erforderlich, aber in zukünftigen Versionen soll sie standardmäßig aktiviert werden.
  • In den Benutzerverwaltungseinheiten wird ein CPU-Ressourcencontroller eingesetzt, der die Anwendung der CPUWeight-Einstellungen auf alle slice-Einheiten ermöglicht, die zur Partitionierung des Systems (app.slice, background.slice, session.slice) verwendet werden, um Ressourcen zwischen verschiedenen Benutzerdiensten, die um CPU-Ressourcen konkurrieren, zu isolieren. In CPUWeight wird auch die Unterstützung des Wertes „idle“ bereitgestellt, um den entsprechenden Ressourcenbereitstellungsmodus zu aktivieren.
  • In den transienten Einheiten und in der Systemd-Repart-Utility ist es möglich, Einstellungen durch die Erstellung von Drop-in-Dateien im Verzeichnis /etc/systemd/system/Name.d/ zu überschreiben.
  • Für Systemabbilder wurde eine Flagge zur Einstellung des Unterstützungsende-Status („support-ended“) bereitgestellt, die auf der Grundlage des neuen Parameters „SUPPORT_END=“ in der Datei /etc/os-release festgelegt wird.
  • Die Einstellungen „ConditionCredential=“ und „AssertCredential=“ wurden hinzugefügt, die verwendet werden können, um Einheiten bei Abwesenheit bestimmter Anmeldeinformationen im System zu ignorieren oder zu stoppen.
  • In system.conf und user.conf wurden die Einstellungen „DefaultSmackProcessLabel=“ und „DefaultDeviceTimeoutSec=“ hinzugefügt, um das SMACK-Sicherheitslevel und den Timeout für die Aktivierung der Einheit festzulegen, die standardmäßig angewendet werden.
  • In den Einstellungen „ConditionFirmware=" und „AssertFirmware=" wurde die Möglichkeit hinzugefügt, einzelne SMBIOS-Felder anzugeben, zum Beispiel für das Starten einer Einheit, wenn das Feld /sys/class/dmi/id/board_name den Wert „Custom Board“ enthält. Es kann „ConditionFirmware=smbios-field(board_name = „Custom Board“)“ angegeben werden.
  • Im Initialisierungsprozess (PID 1) wurde die Möglichkeit hinzugefügt, Anmeldeinformationen aus den SMBIOS-Feldern (Typ 11, „OEM vendor strings“) zusätzlich zu deren Definition über qemu_fwcfg zu importieren, was die Bereitstellung von Anmeldeinformationen vereinfacht. für virtuelle Maschinen und ermöglicht es, ohne Drittanbietertools wie cloud-init und ignition auszukommen.
  • Beim Herunterfahren wurde die Logik zum Aushängen virtueller Dateisysteme (proc, sys) geändert und sichergestellt, dass Informationen über Prozesse, die die Aushängung der Dateisysteme blockieren, im Protokoll festgehalten werden.
  • Im Systemaufruffilter (SystemCallFilter) wurde der Zugriff auf den Systemaufruf riscv_flush_icache standardmäßig erlaubt.
  • Im Bootloader sd-boot wurde die Möglichkeit hinzugefügt, im gemischten Modus zu booten, in dem der 64-Bit-Linux-Kernel aus einer 32-Bit-UEFI-Firmware gestartet wird. Es wurde eine experimentelle Funktion zum automatischen Anwenden von SecureBoot-Schlüsseln aus Dateien hinzugefügt, die im ESP (EFI-Systempartition) gefunden wurden.
  • Das Dienstprogramm bootctl hat neue Optionen hinzugefügt: «—all-architectures» für die Installation von Binärdateien für alle unterstützten EFI-Architekturen, «—root=» und «—image=» zur Arbeit mit Verzeichnissen oder Disk-Images, sowie «—install-source=» zur Bestimmung der Quelle für die Installation und «—efi-boot-option-description=» zur Verwaltung der Namen von Booteinträgen.
  • Im Dienstprogramm systemctl wurde der Befehl ‘list-automounts’ hinzugefügt, um eine Liste der automatisch eingebundenen Verzeichnisse anzuzeigen, sowie die Option «—image=» für die Ausführung von Befehlen im Kontext eines angegebenen Disk-Images. Zu den Befehlen ‘show’ und ‘status’ wurden die Optionen «—state=» und «—type=» hinzugefügt.
  • In systemd-networkd wurden die Optionen «TCPCongestionControlAlgorithm=» zur Auswahl des TCP-Staukontrollalgorithmus, «KeepFileDescriptor=» zum Speichern der Dateideskriptoren von TUN/TAP-Schnittstellen, «NetLabel=» zum Festlegen von NetLabel-Labels, sowie «RapidCommit=» zur Beschleunigung der Konfiguration über DHCPv6 (RFC 3315) hinzugefügt. Im Parameter «RouteTable=» ist es nun zulässig, die Namen der Routingtabellen anzugeben.
  • In systemd-nspawn ist die Verwendung relativer Dateipfade in den Optionen „—bind=“ und „—overlay=“ erlaubt. Die Option „—bind=“ unterstützt jetzt den Parameter ‘rootidmap’, um die Benutzer-ID von root im Container an den Eigentümer des eingebundenen Verzeichnisses auf der Host-Seite zu binden.
  • In systemd-resolved wird OpenSSL standardmäßig als Backend für die Verschlüsselung verwendet (die Unterstützung von gnutls bleibt als Option erhalten). Nicht unterstützte DNSSEC-Algorithmen werden nun als unsicher behandelt, anstatt einen Fehler (SERVFAIL) zurückzugeben.
  • In systemd-sysusers, systemd-tmpfiles und systemd-sysctl wurde die Möglichkeit implementiert, Einstellungen über den Mechanismus zur Speicherung von Anmeldeinformationen zu übergeben.
  • Das Tool systemd-analyze enthält jetzt den Befehl ‘compare-versions’, um Versionstrings miteinander zu vergleichen (ähnlich wie bei ‘rpmdev-vercmp’ und ‘dpkg —compare-versions’). Die Möglichkeit zur Filterung von Einheiten nach Maske wurde zum Befehl ‘systemd-analyze dump’ hinzugefügt.
  • Wenn Sie den mehrstufigen Schlafmodus (Suspend-Then-Hibernate) wählen, wird die Zeit im Wartemodus nun basierend auf der Prognose der verbleibenden Akkulaufzeit ausgewählt. Der sofortige Wechsel in den Schlafmodus erfolgt, wenn weniger als 5 % des Akkuladestands verbleiben.
  • In 'journalctl' wurde ein neuer Ausgabemodus „-o short-delta“ hinzugefügt, der die Zeitdifferenz zwischen verschiedenen Nachrichten im Protokoll anzeigt.
  • In systemd-repart wurde die Unterstützung für die Erstellung von Partitionen mit dem Dateisystem Squashfs und Partitionen für dm-verity hinzugefügt, auch mit digitalen Signaturen.
  • In systemd-logind wurde die Einstellung „StopIdleSessionSec=“ hinzugefügt, um eine inaktive Sitzung nach Ablauf des festgelegten Timers zu beenden.
  • In systemd-cryptenroll wurde die Option „--unlock-key-file=“ hinzugefügt, um den Entschlüsselungsschlüssel aus einer Datei abzurufen, anstatt durch eine Eingabeaufforderung an den Benutzer.
  • Die Ausführung des Tools systemd-growfs in Umgebungen ohne udev wurde ermöglicht.
  • In systemd-backlight wurde die Unterstützung für Systeme mit mehreren Grafikkarten verbessert.
  • Die Lizenz für die in der Dokumentation bereitgestellten Codebeispiele wurde von CC0 auf MIT-0 geändert.

Änderungen, die die Kompatibilität beeinträchtigen:

  • Bei der Überprüfung der Kernelversionsnummer mit der Direktive ConditionKernelVersion erfolgt jetzt ein einfaches String-Vergleich, wenn die Operatoren '=' oder '!=' verwendet werden. Falls überhaupt kein Vergleichsoperator angegeben ist, kann eine Übereinstimmung mittels glob-Muster unter Verwendung der Zeichen '*' und '?' sowie '[' und ']' erfolgen. Für den Versionsvergleich nach dem Stil der Funktion stverscmp() sollten die Operatoren '', '=' verwendet werden.
  • Das SELinux-Label, das zur Überprüfung des Zugriffs aus der Unit-Datei verwendet wird, wird nun während des Datei-Ladevorgangs gelesen und nicht erst beim Zugriffsprüfung.
  • Die Bedingung 'ConditionFirstBoot' wird jetzt beim ersten Systemstart nur direkt in der Startphase aktiviert und gibt 'false' zurück, wenn Einheiten nach Abschluss des Starts aufgerufen werden.
  • Im Jahr 2024 wird die Unterstützung des Ressourcenbeschränkungsmechanismus cgroup v1 in systemd eingestellt, nachdem dieser in der Version systemd 248 als veraltet eingestuft wurde. Administratoren wird empfohlen, sich frühzeitig um die Migration zu cgroup v2 für Dienste, die von cgroup v1 abhängen, zu kümmern. Ein entscheidender Unterschied zwischen cgroups v2 und v1 besteht darin, dass cgroups v2 eine gemeinsame Hierarchie für alle Ressourcentypen verwendet, anstatt separate Hierarchien für die Verteilung von CPU-Ressourcen, die Regulierung des Speicherverbrauchs und für Ein-/Ausgabe zu haben. Separate Hierarchien führen zu Schwierigkeiten in der Interaktion zwischen den Verwaltern und erhöhen den Ressourcenaufwand des Kernels, wenn die Regeln auf Prozesse angewendet werden, die in verschiedenen Hierarchien erwähnt sind.
  • In der zweiten Hälfte des Jahres 2023 wird die Unterstützung für separate Hierarchien von Verzeichnissen eingestellt, wenn /usr getrennt vom Wurzelverzeichnis oder die Verzeichnisse /bin und /usr/bin sowie /lib und /usr/lib getrennt montiert werden.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster