Nach drei Monaten Entwicklung ist die Version des Systemmanagers systemd 259 verfügbar. Wichtige Änderungen: Unterstützung der Standardbibliothek Musl, der Befehl „run0 —empower“ zur Durchführung privilegierter Aktionen ohne UID-Wechsel, dynamisches Laden von externen Bibliotheken, die in libsystemd benötigt werden, sowie das Ignorieren von Konfigurationsdateien durch das Hinzufügen von „.ignore“ zum Dateinamen.
Zu den Änderungen in der neuen Version gehören:
- Teilweise Unterstützung der Standard-C-Bibliothek Musl hinzugefügt, die aktiviert wird, indem der Wert „musl“ in den Optionen „libc“ im Build-System Meson gesetzt wird. Da die Musl-Bibliothek keine NSS-Funktionalität bereitstellt, sind die Komponenten nss-systemd, nss-resolve, systemd-homed, systemd-nsresourced, systemd-userdbd sowie die Parameter DynamicUser und die Möglichkeit, systemd-nspawn unprivilegiert auszuführen, bei der Kompilierung von systemd mit Musl nicht verfügbar. Die Entwickler von systemd garantieren vorerst nicht, dass die Unterstützung von Musl in zukünftigen Versionen erhalten bleibt. Die Entscheidung hängt vom Erfolg der Entwicklung eines Layer ab, der zusätzliche Funktionen über Musl implementiert, sowie von der Nachfrage nach dem Projekt und Berichten über muslspezifische Fehler.
- In das Tool run0, das als sichere Alternative zu sudo funktioniert und über systemd-run arbeitet, wurde die Option „—empower“ hinzugefügt. Diese erlaubt es, eine neue Sitzung mit erhöhten Rechten zu starten, ohne zu dem Benutzer root zu wechseln. Die Ausführung privilegierter Aktionen ohne UID-Wechsel erfolgt durch das Setzen von Capability-Flags, wie z.B. CAP_SYS_ADMIN, die ausreichen, um auf die meisten privilegierten Systemaufrufe zuzugreifen. Die gestarteten Prozesse werden ebenfalls in eine separate „empower“-Gruppe eingeordnet, die den Zugriff auf die meisten Polkit-Aktionen erhält.
- Es wurde beschlossen, die Unterstützung für Service-Skripte im Format System V in der nächsten Version zu entfernen. Betroffen sind die Komponenten systemd-sysv-install, systemd-rc-local-generator und systemd-sysv-generator. In der nächsten Veröffentlichung sind auch höhere Anforderungen an die Minimalversionen vorgesehen: Linux-Kernel 5.10, glibc 2.34, openssl 3.0.0, python 3.9.0, libxcrypt 4.4.0, util-linux 2.37, elfutils 0.177, cryptsetup 2.4.0, libseccomp 2.4.0.
- Im Rahmen der Initiative zur Reduzierung von Abhängigkeiten wurde in libsystemd eine dynamische Bibliotheksladung für libacl, libblkid, libseccomp, libselinux und libmount implementiert. Diese erfolgt über den Aufruf von dlopen(), wenn deren Funktionen tatsächlich benötigt werden. Über dlopen() wird auch die Arbeit mit dem Linux-Audit-Subsystem und PAM realisiert. Die vorher über die Bibliotheksschicht libcap aufgerufene Funktionalität ist nun in libsystemd integriert.
- In systemd-resolved wurde die Möglichkeit hinzugefügt, lokale Handler zu befestigen, die bei jeder Anfrage zur Auflösung lokaler Namen aufgerufen werden. Die Handler werden im Verzeichnis /run/systemd/resolve.hook/ platziert.
- In der Benutzerdatenbank wurde ein UUID-Feld hinzugefügt, und der Dienst userdbctl erhielt die Option „—uuid“ zur Suche nach UUIDs.
- Es wird sichergestellt, dass Konfigurationsdateien mit einem Namen, der auf „.ignore“ endet, ignoriert werden.
- In systemd-importd wurde eine integrierte Logik für die Arbeit mit TAR-Archiven implementiert, die libarchive anstelle des Aufrufs des GNU-tar-Dienstprogramms verwendet. Es ist nun möglich, systemd-machined und systemd-importd gebunden an Benutzer zu starten, anstatt systemweit, wobei Systemabbilder in ~/.local/state/machines/ geladen werden. Um den Arbeitsmodus auszuwählen, wurden in das Dienstprogramm importctl die Optionen „—user“ und „—system“ integriert.
- Der Standardprotokollspeichermodus wurde von 'auto' auf 'persistent' geändert (früher hing der Modus von der Verfügbarkeit des Verzeichnisses /var/log/journal ab).
- In systemd-networkd und systemd-nspawn wurde die Unterstützung für die Erstellung von NAT-Regeln über iptables/libiptc eingestellt. Es bleibt nur die Unterstützung für nftables.
- In systemd-boot und systemd-stub wurde die Unterstützung für TPM 1.2 eingestellt (Unterstützung für TPM 2.0 bleibt bestehen).
- In systemd-machined wird standardmäßig das Mounten von 'versteckten' Disk-Images, deren Name mit einem Punkt beginnt, im Nur-Lese-Modus ermöglicht.
- Die API basierend auf dem Varlink-Protokoll wurde erweitert, die jetzt für den Zugriff auf die Einstellungen von Diensten verwendet werden kann. IPC-Aufrufe Reload() und Reexecute() wurden implementiert. Aufrufe zum Zugriff auf die Funktionen und Einstellungen von systemd-repart, systemd-resolved und systemd-networkd wurden hinzugefügt.
- Die Einstellung ExecReloadPost wurde hinzugefügt, die das Ausführen von Befehlen nach der Neuladevorgang der Dienstkonfiguration ermöglicht.
- Für Dienste wurden die Eigenschaften OOMKills und ManagedOOMKills implementiert, die die Anzahl der vom Kernel oder systemd-oomd aufgrund von Speichermangel zwangsweise beendeten Prozesse enthalten.
- Für temporäre Dienste wurde die Eigenschaft RootDirectoryFileDescriptor hinzugefügt, die den Dateideskriptor des Root-Verzeichnisses festlegt.
- Die Einstellung UserNamespacePath wurde hinzugefügt, um einen Unit mit dem Benutzer-Identifikatorraum (User Namespace) zu verknüpfen, indem der Pfad im Pseudo-Dateisystem /proc angegeben wird, analog zu den Einstellungen IPCNamespacePath und NetworkNamespacePath. In systemd-nspawn wurde die Einstellung NamespacePath zur Angabe des Netzwerk-Namensraums im Abschnitt [Network] der .nspawn-Dateien hinzugefügt.
- In systemd-sysext und systemd-confext wurde die Unterstützung für separate Konfigurationsdateien /etc/systemd/systemd-sysext.conf und /etc/systemd/systemd-confext.conf implementiert. Es wurde die Möglichkeit hinzugefügt, die Umgebungsvariable SYSTEMD_SYSEXT_OVERLAYFS_MOUNT_OPTIONS und $SYSTEMD_CONFEXT_OVERLAYFS_MOUNT_OPTIONS zur Konfiguration der Overlayfs-Mount-Optionen zu verwenden.
- In systemd-udevd wurde die Einstellung OPTIONS="dump-json" hinzugefügt, um den Status des aktuellen Ereignisses im JSON-Format auszugeben. In der Funktion net_id wurde die Generation vorhersagbarer Namen für drahtlose Netzwerk-Interfaces auf Systemen mit DeviceTree implementiert. Es wurde sichergestellt, dass symbolische Links /dev/gpio/by-id/… für GPIO-Geräte generiert werden.
- Der Befehl „homectl update“ wurde um die Möglichkeit erweitert, die Option „—recovery-key“ zu verwenden, um Backup-Schlüssel zu einem bestehenden Benutzerkonto hinzuzufügen (früher konnten solche Schlüssel nur beim Erstellen des Benutzers hinzugefügt werden).
- In systemd-homed wurden die Optionen „—prompt-shell“ und „—prompt-groups“ hinzugefügt, um interaktiv die Kommandozeile und Gruppe während des ersten Starts mit dem Dienst systemd-homed-firstboot.service auszuwählen. In systemd-firstboot wurde die Option „—prompt-keymap-auto“ hinzugefügt, um beim Arbeiten über die lokale Konsole während des ersten Starts die Tastaturbelegung abzufragen.
- In systemd-boot wurde die Möglichkeit hinzugefügt, die Log-Level über den Parameter log-level in loader.conf oder das SMBIOS-Feld io.systemd.boot.loglevel festzulegen.
- In systemd-networkd wurden für den DHCP-Server die Optionen EmitDomain und Domain hinzugefügt, sowie ein Handler implementiert, um die durch DHCP über DNS-Resolving bereitgestellten Hostnamen zu bestimmen.
- In systemd-run wurde die Option „—root-directory“ hinzugefügt, um einen Dienst im angegebenen Wurzelverzeichnis zu starten. In systemd-run und run0 wurde die Option „—same-root-dir“ („-R“) hinzugefügt, um einen Dienst im selben Wurzelverzeichnis zu starten wie der ausführende Prozess.
- In systemd-modules-load wurde die parallele Ladefunktion von Kernmodulen implementiert.
- In systemd-integrity-setup wurde die Unterstützung der Algorithmen HMAC-SHA256, PHMAC-SHA256 und PHMAC-SHA512 hinzugefügt.
Quelle: opennet.ru
