Systemd

Systemd #

Einführung #

systemd ist ein System- und Dienstmanager für Linux-Betriebssysteme. Wenn er als erster Prozess beim Booten (als PID 1) ausgeführt wird, fungiert er als Init-System, das Dienste im Userspace aufruft und verwaltet.

Es gibt verschiedene Service-Arten:

  • Service units, die Daemons und die Prozesse, aus denen sie bestehen, starten und steuern.
  • Socket units, die lokale IPC- oder Netzwerk-Sockets im System kapseln, nützlich für die socketbasierte Aktivierung.
  • Target units sind nützlich, um units zu gruppieren oder bekannte Synchronisationspunkte während des Bootvorgangs bereitzustellen.
  • Device units stellen Kernel-Geräte in systemd dar und können verwendet werden, um eine gerätebasierende Aktivierung zu implementieren.
  • Mount units kontrollieren Einhängepunkte im Dateisystem.
  • Automount units bieten Automount-Funktionen für das on-demand Einhängen von Dateisystemen sowie für das parallelisierte Hochfahren.
  • Timer units sind nützlich, um die Aktivierung anderer units basierend auf Zeitgebern auszulösen.
  • Swap units sind den Mount units sehr ähnlich und kapseln Speicherauslagerungspartitionen oder Dateien des Betriebssystems.
  • Pfadeinheiten können verwendet werden, um andere Dienste zu aktivieren, wenn sich Dateisystemobjekte ändern oder modifiziert werden.
  • Slice units können verwendet werden, um units, die Systemprozesse verwalten (z. B. Service- und Scope- units), zu Zwecken der Ressourcenverwaltung in einem hierarchischen Baum zu gruppieren.
  • Scope units sind ähnlich wie Service units, verwalten aber auch fremde Prozesse, anstatt sie zu starten.

Systemd bietet auch einen journald Service, der Logging Daten sammelt und speichert. Dieser erstellt und pflegt strukturierte, indizierte Journale auf der Grundlage von Logging Daten, die von verschiedenen Quellen empfangen (Kernel log via kmsg, standard output und standard error, audit records vom kernel audit Subsystem) werden können. Journalctl ist ein Tool, um die Daten vom systemd-journald Service abzufragen.

Systemd bietet auch einen logind Service, der Benutzeranmeldungen verwaltet. Er ist für folgendes verantwortlich:

  • Überprüfung von Benutzern und Sessions, deren Prozessen und deren Leerlaufzustand.
  • Erstellung und Verwaltung von Session-Ids
  • Bereitstellung von Polkit-basierendem Zugriff für Benutzer-Aktionen wie das Herunterfahren des Systems
  • Handhabung der Hardware-Tasten für Poweroff und Sleep
  • Multi-seat management
  • Gerätezugriffsverwaltung

Ausserdem gibt es noch:

  • einen resolved Service, der dns Auflösung anbietet.
  • einen timesyncd Service, für die netzwerkübergreifende Synchronisation der system Uhr.
  • einen tmpfiles Service, um das /tmp zu verwalten.
  • einen udevd Service, der das /dev Verzeichnis verwaltet.

Systemd Security #

Der Linux Kernel kann den Zugriff auf das Dateisystem, das Netzwerk, Geräte, Kernel Capabilities und Syscalls einschränken.

Systemd bietet einen Command systemd-analyze security, um einen Überblick über das System zu erhalten. Zu beachten ist, dass andere Security Features wie SELinux, AppArmor oder in das Programm eingebaute nicht berücksichtigt werden.

Im Anschluss kann dann pro Service die Sicherheit mit systemd-analyze security myservice.service ausgewertet werden. Die einzelnen Optionen sind zwar in der Ausgabe beschrieben, können aber in der Dokumentation nachgelesen werden.

Transiente Services mit Systemd erstellen #

Synopsis #

systemd-run [OPTIONS...] COMMAND [ARGS...] 

Beispiele #

# Startet eine Shell (funktioniert nur, wenn man in einem lesbaren Verzeichnis ist z.B. /tmp)
sudo systemd-run -p "DynamicUser=yes" -p "ProtectSystem=yes" -p "ProtectHome=yes" --shell 

# führt den ls -lha / command aus.
sudo systemd-run -t -p "DynamicUser=yes" -p "ProtectSystem=yes" -p"ProtectHome=yes" ls -lha /
Calendar January 15, 2022