Unwichtige Systemd Dienste identifizieren und deaktivieren  Bild © PCMasters.deUnwichtige Systemd Dienste identifizieren und deaktivieren (Bild © PCMasters.de)

Jeder aktive Dienst beansprucht einen Teil des Arbeitsspeichers (RAM) und der CPU-Zyklen des Systems. Noch kritischer ist, dass Dienste, die Netzwerkports öffnen, um auf eingehende Verbindungen zu warten, Schwachstellen verursachen können. Wenn ein Dienst wie ein FTP-Server oder ein Druckspooler auf einem headless Produktionsserver läuft, wo er nicht benötigt wird, bietet er einen potenziellen Einstiegspunkt für unbefugten Zugriff.

Um einen Server zu optimieren, sollten Administratoren die spezifische Rolle des Systems (z. B. Datenbankserver, Webserver oder Anwendungshost) bewerten und sicherstellen, dass nur die wesentlichen Abhängigkeiten aktiv sind.

Überwachung und Identifizierung aktiver Dienste

Bevor der Systemzustand geändert wird, muss geprüft werden, welche Dienste derzeit aktiv sind. Systemd bietet hierfür eine umfassende Suite von Tools.

Überprüfung laufender Einheiten

Um eine Liste aller Dienste zu erstellen, die sich derzeit im laufenden Zustand befinden, wird der folgende Befehl verwendet:

sudo systemctl list-units --type=service --state=running

Anhand dieser Ausgabe können Administratoren in Echtzeit Prozesse identifizieren, die aktiv sind und Ressourcen verbrauchen.

Analyse der offenen Netzwerkports

Ein wichtiger Bestandteil der Server-Absicherung ist die Identifizierung von Diensten, die gegenüber dem Netzwerk exponiert sind. Dienste, die auf Verbindungen „warten“, stellen die größten Sicherheitsrisiken dar. Mit den Dienstprogrammen ss oder netstat lassen sich offene TCP- und UDP-Ports anzeigen:

sudo ss -tuln

ODER

sudo netstat -tuln

Wenn beispielsweise Port 21 offen ist, deutet dies darauf hin, dass ein FTP-Dienst aktiv ist. Wenn FTP für die Funktionalität des Servers nicht erforderlich ist, sollte der zugehörige Dienst deaktiviert werden.

Identifizierung gängiger, nicht essenzieller Dienste

Je nach Bereitstellungsumgebung (physische Hardware, virtuelle Maschine oder Container) sind bestimmte Dienste häufig redundant. Die folgende Tabelle listet Dienste auf, die oft standardmäßig aktiv sind, aber möglicherweise unnötig sind:

Dienstname Hauptfunktion Grund für die Deaktivierung
avahi-daemon Netzwerk ohne Konfiguration / Erkennung Nicht erforderlich für Server mit statischer IP-Adresse
bluetooth.service Bluetooth-Hardwareverwaltung Überflüssig auf Servern ohne Bildschirm
cups.service Common Unix Printing System Nicht erforderlich für Server ohne Druckfunktion
postfix.service Mail Transfer Agent (MTA) Überflüssig, wenn keine lokalen E-Mails versendet werden
iscsi.service iSCSI-Netzwerkspeicheranbindung Deaktiviere diesen Dienst, wenn du keinen iSCSI-Speicher nutzt
qemu-guest-agent VM-Kommunikation mit QEMU/KVM Überflüssig, wenn du dich nicht in einer QEMU/KVM-VM befindest
apport.service Automatische Fehlermeldung (Ubuntu) Optional für Produktionsumgebungen
sssd.service System Security Services Daemon (LDAP/AD) Deaktivieren, wenn lokale Authentifizierung verwendet wird
hyperv-daemons Hyper-V-Gastintegration Überflüssig, wenn nicht auf Hyper-V
nfs-client.target Network File System-Client Deaktiviere diesen Dienst, wenn keine NFS-Freigaben eingebunden werden

Um diese Dienste zu deaktivieren und zu verhindern, dass sie beim Systemstart gestartet werden, wird der Befehl disable verwendet:

sudo systemctl disable [Dienstname]

Beispiel: sudo systemctl disable apache2

Um den Dienst sofort zu beenden, ohne neu zu starten, ersetze disable durch stop:

sudo systemctl stop bluetooth

Erweiterte Dienstanalyse und -steuerung

Um ein tieferes Verständnis der Systemleistung und des Startverhaltens zu erlangen, können Administratoren erweiterte systemd-Analysewerkzeuge nutzen.

Analyse der Startleistung

Um festzustellen, welche Dienste am meisten zur Startzeit des Systems beitragen, liefert der folgende Befehl eine detaillierte Aufschlüsselung:

systemd-analyze blame

Diese Liste ordnet die Dienste nach der für ihre Initialisierung benötigten Zeit, sodass Administratoren Dienste mit hoher Latenz gezielt entfernen oder optimieren können.

Verwaltung der Dienstpersistenz und des Maskierens

Über das Stoppen und Deaktivieren hinaus bietet systemd eine „Mask“-Funktion. Während disable verhindert, dass ein Dienst automatisch startet, kann er dennoch manuell oder als Abhängigkeit für einen anderen Dienst gestartet werden. Das Maskieren erstellt einen symbolischen Link nach /dev/null, wodurch es dem Dienst unter keinen Umständen mehr möglich ist, zu starten.

So maskierst du einen Dienst:

sudo systemctl mask [Dienstname]

So stellst du einen maskierten Dienst wieder her:

sudo systemctl unmask [Dienstname]

Aktivierte Unit-Dateien überprüfen

Um eine vollständige Liste aller Dienste anzuzeigen, die so konfiguriert sind, dass sie beim Systemstart automatisch starten, unabhängig davon, ob sie gerade laufen:

systemctl list-unit-files --type=service --state=enabled