Nach fünf Monaten Entwicklung wurde der Systemmanager veröffentlicht . Zu den Neuerungen gehört die Integration eines Handlers für Speicherknappheit in PID 1, die Unterstützung für das Anheften eigener BPF-Programme zur Filterung des Datenverkehrs von Unit-Instanzen, zahlreiche neue Optionen für systemd-networkd, ein Überwachungsmodus für die Bandbreite von Netzwerkschnittstellen, standardmäßige Verwendung von 22-Bit PID-Nummern anstelle von 16-Bit auf 64-Bit-Systemen, der Übergang zu einer einheitlichen Hierarchie von cgroups und die Einbeziehung des systemd-network-generators.
Wesentliche Änderungen:
- Der Handler PID 1 wurde um die Erkennung der vom Kernel generierten Signale für Speicherknappheit (Out-Of-Memory, OOM) erweitert, um Einheiten, die den Speicherlimit erreicht haben, in einen speziellen Zustand zu versetzen mit der optionalen Möglichkeit, sie zwangsweise zu beenden oder zu stoppen;
- Für Unit-Dateien wurden neue Parameter IPIngressFilterPath und
IPEgressFilterPath implementiert, die die Anbindung von BPF-Programmen mit beliebigen Handlers zur Filterung von eingehenden und ausgehenden IP-Paketen ermöglichen, die von Prozessen generiert werden, die mit dieser Einheit verbunden sind. Diese Funktionen ermöglichen es, eine Art Firewall für systemd-Dienste zu erstellen. einfachen Netzwerkfilters auf Basis von BPF; - Das Werkzeug systemctl hat den Befehl „clean“ zur Entfernung von Cache, Runtime-Dateien, Statusinformationen und Logverzeichnissen hinzugefügt;
- In systemd-networkd wurde die Unterstützung für die Netzwerkinterfaces MACsec, nlmon, IPVTAP und Xfrm hinzugefügt;
- In systemd-networkd wurde eine separate Konfiguration der DHCPv4- und DHCPv6-Stacks über die Abschnitte „[DHCPv4]“ und „[DHCPv6]“ in der Konfigurationsdatei implementiert. Eine neue Option RoutesToDNS wurde hinzugefügt, um eine separate Route zum DNS-Server hinzuzufügen, die in den vom DHCP-Server erhaltenen Parametern angegeben ist (damit der Verkehr zu DNS über denselben Link gesendet wird wie die Hauptroute, die vom DHCP erhalten wurde). Für DHCPv4 wurden neue Optionen hinzugefügt: MaxAttempts – maximale Anzahl von Anfragen zur Adresszuweisung, BlackList – eine schwarze Liste von DHCP-Servern, SendRelease – Aktivierung des Sendens von DHCP RELEASE-Nachrichten am Ende der Sitzung;
- Dem Werkzeug systemd-analyze wurden neue Befehle hinzugefügt:
- „systemd-analyze timestamp“ – Analyse und Umwandlung von Zeit;
- „systemd-analyze timespan“ – Analyse und Umwandlung von Zeitspannen;
- „systemd-analyze condition“ – Analyse und Test von ConditionXYZ-Ausdrücken;
- „systemd-analyze exit-status“ – Analyse und Umwandlung von Exit-Codes von Nummern in Namen und umgekehrt;
- «systemd-analyze unit-files» – zeigt eine Liste aller Dateipfade für Einheiten und deren Aliase an.
- Die Optionen SuccessExitStatus, RestartPreventExitStatus und
RestartForceExitStatus unterstützen jetzt nicht nur numerische Rückgabecodes, sondern auch deren textliche Bezeichnungen (zum Beispiel «DATAERR»). Die Liste der Zuordnungen von Codes zu Bezeichnungen kann mit dem Befehl «systemd-analyze exit-status» angezeigt werden; - Das Tool networkctl hat den Befehl «delete» zum Entfernen virtueller Netzwerkschnittstellen hinzugefügt sowie die Option «—stats» zur Anzeige von Statistiken über die Geräte;
- In networkd.conf wurden die Einstellungen SpeedMeter und SpeedMeterIntervalSec für die regelmäßige Messung der Bandbreite von Netzwerkschnittstellen hinzugefügt. Die Statistik aus den Messungen kann im Ausgabe der Kommandozeile ‚networkctl status‘ eingesehen werden;
- Ein neues Tool systemd-network-generator wurde hinzugefügt, um Dateien
.network, .netdev und .link basierend auf den IP-Einstellungen zu generieren, die beim Start über die Kommandozeile des Linux-Kernels im Dracut-Einstellungsformat übergeben wurden; - Der Wert von sysctl «kernel.pid_max» wird jetzt standardmäßig auf 4194304 (22-Bit-PIDs statt 16-Bit) in 64-Bit-Systemen eingestellt. Dies verringert die Wahrscheinlichkeit von PID-Kollisionen, erhöht die Grenze für gleichzeitig ausgeführte Prozesse und hat positive Auswirkungen auf die Sicherheit. Potenziell könnte diese Änderung zu Kompatibilitätsproblemen führen, jedoch wurden bisher keine solchen Probleme gemeldet.
- Standardmäßig wird während des Build-Prozesses auf die einheitliche Hierarchie cgroups-v2 («-Ddefault-hierarchy=unified») umgestellt. Zuvor wurde standardmäßig der hybride Modus («-Ddefault-hierarchy=hybrid») verwendet.
- Das Verhalten des Systemaufruffilters (SystemCallFilter) wurde geändert. Bei einem Verstoß gegen einen verbotenen Systemaufruf beendet er nun den gesamten Prozess anstelle einzelner Threads, da das Beenden einzelner Threads zu unvorhersehbaren Problemen führen konnte. Diese Änderungen gelten nur bei Verwendung des Linux-Kernels 4.14+ und libseccomp 2.4.0+.
- Unprivilegierten Programmen wurde die Möglichkeit gegeben, ICMP-Echo-Pakete (Ping) zu senden, indem sysctl «net.ipv4.ping_group_range» für den gesamten Bereich der Gruppen (für alle Prozesse) eingestellt wurde.
- Um den Aufbauprozess zu beschleunigen, wurde die Generierung von man-Seiten standardmäßig deaktiviert (für den vollständigen Dokumentationsaufbau muss die Option „-Dman=true“ oder „-Dhtml=true“ für HTML-Dokumente verwendet werden). Zur Vereinfachung des Dokumentationszugriffs sind zwei Skripte in das Paket aufgenommen: build/man/man und build/man/html, um die gewünschten Anleitungen zu generieren und anzuzeigen;
- Für die Verarbeitung von Domainnamen mit Zeichen aus nationalen Alphabeten wird standardmäßig die Bibliothek libidn2 verwendet (um libidn zurückzugeben, sollte die Option „-Dlibidn=true“ genutzt werden);
- Die Unterstützung der ausführbaren Datei /usr/sbin/halt.local wurde eingestellt, da die Funktionalität nicht weitläufig in Distributionen genutzt wurde. Für die Ausführung von Befehlen beim Herunterfahren wird empfohlen, Skripte in /usr/lib/systemd/system-shutdown/ zu verwenden oder eine neue Einheit abhängig von final.target zu definieren;
- In der letzten Phase des Herunterfahrens erhöht systemd nun automatisch die Protokollebene im sysctl „kernel.printk“, was das Problem mit der Protokollierung von Ereignissen löst, die in den späten Phasen des Herunterfahrens auftreten, wenn die regulären Logging-Daemons bereits beendet sind;
- In journalctl und anderen Log-Anzeigewerkzeugen werden Warnungen in Gelb und Audit-Einträge in Blau hervorgehoben, um sie visuell von der Gesamtmasse abzuheben;
- Im Umgebungsvariable $PATH steht der Pfad zu bin/ jetzt vor dem Pfad zu sbin/, d.h. bei gleichnamigen ausführbaren Dateien in beiden Verzeichnissen wird die Datei aus bin/ ausgeführt;
- In systemd-logind wurde der Aufruf SetBrightness() implementiert, um die Bildschirmhelligkeit sicher für jede Sitzung zu ändern;
- Dem Befehl „udevadm info“ wurde die Option „—wait-for-initialization“ hinzugefügt, um auf den Abschluss der Geräteinitialisierung zu warten;
- Während des Systemstarts gibt der PID 1-Handler nun die Namen der Einheiten aus, anstelle einer Beschreibung. Um das vorherige Verhalten wiederherzustellen, kann die Option StatusUnitFormat in /etc/systemd/system.conf oder der Kernel-Parameter systemd.status_unit_format verwendet werden;
- In /etc/systemd/system.conf wurde für den Watchdog in PID 1 die Option KExecWatchdogSec hinzugefügt, die das Timeout für einen Neustart mit kexec definiert. Die alte Einstellung
ShutdownWatchdogSec wurde in RebootWatchdogSec umbenannt und definiert das Timeout für Arbeiten während des Herunterfahrens oder regulären Neustarts; - Für Dienste wurde eine neue Option hinzugefügt, , die es ermöglicht, Befehle festzulegen, die vor ExecStartPre ausgeführt werden. Basierend auf dem von dem Befehl zurückgegebenen Fehlercode wird entschieden, ob die Einheit weiter ausgeführt wird — wenn der Code 0 zurückgegeben wird, wird der Start der Einheit fortgesetzt, bei Codes von 1 bis 254 erfolgt ein stiller Abbruch ohne Hinweis auf einen Fehler, und bei 255 wird das Ganze mit einem Fehlerhinweis abgebrochen;
- Ein neuer Dienst systemd-pstore.service wurde hinzugefügt, um Daten aus sys/fs/pstore/ zu extrahieren und in /var/lib/pstore zu speichern, um eine weitere Analyse zu ermöglichen;
- Im Tool timedatectl wurden neue Befehle hinzugefügt, um NTP-Parameter für systemd-timesyncd in Bezug auf Netzwerkschnittstellen zu konfigurieren;
- Im Befehl „localectl list-locales“ wird die Anzeige von Locales, die von UTF-8 abweichen, eingestellt;
- Es wurde sichergestellt, dass Fehler bei der Variablenzuweisung in sysctl.d/-Dateien ignoriert werden, wenn der Variablenname mit dem Zeichen „-„ beginnt;
- Dienste verantwortet jetzt vollständig für die Initialisierung des Entropie-Pools des Kernel-Pseudozufallszahlengenerators von Linux. Dienste, die eine korrekt initialisierte /dev/urandom benötigen, müssen nach systemd-random-seed.service gestartet werden;
- Im Bootloader systemd-boot wurde die optionale Unterstützung für mit einer zufälligen Sequenz im EFI-Systempartition (ESP);
- Das Dienstprogramm bootctl hat neue Befehle «bootctl random-seed» zur Generierung einer Seed-Datei im ESP und «bootctl is-installed» zur Überprüfung der Installation des Bootloaders systemd-boot erhalten. In bootctl werden außerdem Warnungen über fehlerhafte Konfigurationen von Booteinträgen ausgegeben (z. B. wenn das Kernel-Image gelöscht wurde, aber der Eintrag zum Laden bleibt);
- Die Auswahl einer Swap-Partition erfolgt automatisch, wenn das System in den Ruhezustand wechselt. Die Partition wird basierend auf ihrer festgelegten Priorität und im Falle gleicher Prioritäten – nach der Größe des freien Speicherplatzes – ausgewählt;
- In /etc/crypttab wurde die Option keyfile-timeout hinzugefügt, um die Wartezeit des Geräts mit dem Verschlüsselungsschlüssel vor der Abfrage des Passworts für den Zugriff auf die verschlüsselte Partition festzulegen;
- Die Option IOWeight wurde hinzugefügt, um das Gewicht der Ein-/Ausgabe für den BFQ-Scheduler festzulegen;
- In systemd-resolved wurde ein strenger (‘strict’) Betriebsmodus für DNS-over-TLS hinzugefügt und die Möglichkeit implementiert, nur positive DNS-Antworten zu cachen (»Cache no-negative« in resolved.conf);
- Für VXLAN in systemd-networkd wurde die Option GenericProtocolExtension hinzugefügt, um VXLAN-Protokollerweiterungen zu aktivieren. Für VXLAN und GENEVE ist die Option IPDoNotFragment hinzugefügt worden, um das Fragmentierungsverbot für ausgehende Pakete zu setzen;
- In systemd-networkd wurde im Abschnitt „[Route]“ die Option FastOpenNoCookie für die Aktivierung des TCP-Fast-Open-Mechanismus (TFO — TCP Fast Open, RFC 7413) für spezifische Routen sowie die Option TTLPropagate zur Konfiguration des TTL LSP (Label Switched Path) eingeführt. In der Option „Type“ werden die Routing-Modi local, broadcast, anycast, multicast, any und xresolve unterstützt;
- In systemd-networkd wurde im Abschnitt „[Network]“ die Option DefaultRouteOnDevice eingeführt, um die automatische Konfiguration einer Standardroute für ein bestimmtes Netzwerkgerät zu ermöglichen;
- In systemd-networkd wurden für Netzwerkbrücken die Optionen ProxyARP und
ProxyARPWifi zur Konfiguration des Proxy-ARP-Verhaltens, MulticastRouter zur Festlegung der Routingparameter im Multicast-Modus sowie MulticastIGMPVersion zur Anpassung der IGMP-Version (Internet Group Management Protocol) für Multicast hinzugefügt; - In systemd-networkd wurden für FooOverUDP-Tunnel die Optionen Local, Peer und PeerPort hinzugefügt, um die IP-Adressen der lokalen und entfernten Seiten sowie die Nummer des Netzwerkports zu konfigurieren. Für TUN-Tunnel wurde die Option VnetHeader hinzugefügt, um die Unterstützung von GSO (Generic Segment Offload) zu aktivieren.
- In systemd-networkd gibt es in den Dateien .network und .link im Abschnitt [Match] die neue Option Property, mit der Geräte anhand spezifischer Eigenschaften in udev identifiziert werden können.
- In systemd-networkd wurde die Option AssignToLoopback für Tunnel hinzugefügt, die die Bindung des Tunnelendpunkts an das Loopback-Gerät „lo“ steuert.
- In systemd-networkd wurde die Aktivierung des IPv6-Stacks automatisiert, wenn dieser über sysctl disable_ipv6 blockiert ist — IPv6 wird aktiviert, wenn für das Netzwerkinterface IPv6-Einstellungen (statisch oder DHCPv6) definiert sind; andernfalls bleibt der bereits gesetzte sysctl-Wert unverändert.
- In den .network-Dateien wurde die Einstellung CriticalConnection durch die Option KeepConfiguration ersetzt, die mehr Möglichkeiten bietet, um Situationen zu definieren ("yes", "static", "dhcp-on-stop", "dhcp"), in denen systemd-networkd bestehende Verbindungen beim Start nicht ändern soll.
- Eine Schwachstelle wurde behoben , verursacht durch fehlende Zugriffskontrolle auf die D-Bus-Schnittstelle von systemd-resolved. Das Problem ermöglicht es einem nicht privilegierten Benutzer, Operationen auszuführen, die sonst nur Administratoren vorbehalten sind, wie z.B. die DNS-Einstellungen zu ändern und DNS-Anfragen an einen gefälschten Server weiterzuleiten;
- Eine Schwachstelle wurde behoben , die mit der Deaktivierung von pam_systemd für nicht-interaktive Sitzungen verbunden ist, was eine Spoofing-Attacke auf eine aktive Sitzung ermöglicht.
Quelle: opennet.ru
