systemd ist ein Init-System und System-Management-Framework für [[Linux]]. Es ersetzt klassische Init-Systeme wie SysVinit oder Upstart und ist heute der Standard in fast allen großen Linux-Distributionen (RHEL, Fedora, Ubuntu, Debian, Arch, SUSE, uvm.). Es stellt eine komplette Suite an Komponenten zur Verwaltung von Diensten, Logging, Netzwerk, Zeitplanung, Cgroups, Security-Hardening und Ressourcen bereit.
systemd besteht aus vielen modularen Komponenten:
* PID 1 (systemd) – Init-System & Prozessmanager
* systemd-[[journald]] – Logging
* systemd-logind – Benutzer- & Sitzungsverwaltung
* systemd-[[networkd]] – Netzwerk (Server-Standard in Ubuntu) (veraltet?)
* systemd-resolved – DNS Resolver
* systemd-timesyncd – NTP/Zeitsynchronisierung
* systemd-udevd – Geräteverwaltung
* systemd-tmpfiles – temporäre Dateien/Verzeichnisverwaltung
* systemd-homed – Nutzerverwaltung (optional)
Durch seine modulare Architektur kann systemd Stück für Stück erweitert werden.
Nicht jede Systemd Distribution verwendet alle oder die selben Module!
=====Units=====
systemd verwaltet alles in Form sogenannter Units. Wichtige Unit-Typen:
^Typ^Zweck^
|.service|Dienste|
|.socket|Sockets für socket-activated services|
|.timer|Cron-Ersatz, zeitgesteuerte Jobs|
|.path|Startet Service bei Dateiänderungen|
|.mount / .automount|Mountpoints|
|.target|Gruppen von Units (z. B. multi-user.target)|
|.slice|Cgroup-Bereiche, Ressourcensteuerung|
Unit-Dateien liegen unter:
* /usr/lib/systemd/system/ -> Distribution
* /etc/systemd/system/ -> Administrator-Anpassungen (höchste Priorität)
systemd analysiert Abhängigkeiten mit:
* Requires=
* Wants=
* Before=
* After=
Es startet Dienste parallel, wodurch Bootprozesse erheblich beschleunigt werden.
Ein Beispiel:
[Unit]
Description=Demo Application
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/app
ExecStart=/opt/app/start.sh
Restart=on-failure
RestartSec=5
# Hardening / Sandboxing
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true
CapabilityBoundingSet=
RestrictSUIDSGID=true
RestrictNamespaces=true
[Install]
WantedBy=multi-user.target
=====Logging=====
systemd bringt ein eigenes Logging-System:
* binär
* lokal oder persistent
* mit systemd integriert
Konfiguration: /etc/systemd/journald.conf
Beispiele:
[Journal]
Storage=persistent
SystemMaxUse=1G
RuntimeMaxUse=200M
ForwardToSyslog=yes
Log lesen:
journalctl -u nginx.service
journalctl -b
journalctl --since "1 hour ago"
=====DNS=====
systemd-resolved ist der DNS-Resolver-Dienst von systemd.
# Cache leeren
resolvectl flush-caches
# status
resolvectl status
Auf modernen Systemen ist es ein Symlink:
/etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
Falls du die Datei manuell setzen willst:
sudo rm /etc/resolv.conf
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Dann nutzt du nicht mehr systemd-resolved.