Unwichtige 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
