4.2 Dienststatus und Startart prüfen Nachdem der betroffene Dienst eindeutig bestimmt wurde, wird geprüft, ob er: im Betriebssystem registriert beziehungsweise geladen ist, aktuell ausgeführt wird, beendet oder fehlgeschlagen ist, beim Systemstart oder bei Bedarf gestartet werden soll, deaktiviert wurde, unter dem vorgesehenen Benutzerkonto läuft, nach einem Fehler automatisch neu gestartet wird. Grundsatz: Zuerst den vorhandenen Zustand vollständig erfassen. Einen Dienst erst danach und nur bei betrieblicher Freigabe starten, stoppen oder neu starten. Ziele dieser Seite Nach dieser Seite sollst du: Dienstname und Anzeigename unterscheiden können, den aktuellen Dienststatus ermitteln können, die konfigurierte Startart überprüfen können, Startart und aktuellen Laufzustand getrennt bewerten können, Dienstkonto, Prozess-ID und Exitcode ermitteln können, Windows-Dienste, systemd-Units und launchd-Jobs unterscheiden können, deaktivierte oder maskierte Dienste erkennen können, einen wiederholt abstürzenden Dienst identifizieren können, Statusinformationen vor einer Änderung dokumentieren können. Sicherheitskennzeichnungen Kennzeichnung Bedeutung [RO] Rein lesende Abfrage [TEST] Aktiver Test ohne beabsichtigte dauerhafte Konfigurationsänderung [PRIV] Erfordert möglicherweise erhöhte Rechte [FILE] Greift lesend oder schreibend auf eine Datei zu [SENS] Ausgabe kann sensible Informationen enthalten [CHANGE] Verändert den Dienstzustand oder die Konfiguration [DISRUPT] Kann laufende Verbindungen oder Arbeitsvorgänge unterbrechen 1. Startart und Dienststatus nicht verwechseln Die Startart beschreibt, wann beziehungsweise wodurch ein Dienst gestartet werden soll. Der Dienststatus beschreibt seinen aktuellen Zustand. Startart beziehungsweise Aktivierung Aktueller Zustand Mögliche Bewertung Automatisch aktiviert Läuft Normaler Zustand Automatisch aktiviert Beendet Startfehler, Absturz oder bewusster Stopp möglich Manuell beziehungsweise bedarfsgesteuert Beendet Kann ein normaler Zustand sein Manuell beziehungsweise bedarfsgesteuert Läuft Dienst wurde angefordert oder manuell gestartet Deaktiviert Beendet Erwarteter Zustand Deaktiviert Läuft Zustandsänderung möglicherweise noch nicht wirksam oder Sonderfall Aktiviert Wiederholt startend und stoppend Absturzschleife oder fehlerhafte Startbedingung möglich Ein beendeter Dienst ist nicht automatisch fehlerhaft. Bedarfsgesteuerte Dienste laufen häufig nur, wenn sie tatsächlich benötigt werden. 2. Dienstverwaltung der Betriebssysteme vergleichen Betriebssystem Dienstverwaltung Konfigurationseinheit Typische Statusabfrage Windows Service Control Manager Windows-Dienst Get-Service oder sc.exe query Linux mit systemd systemd Unit, meistens .service systemctl status macOS launchd Daemon, Agent oder XPC-Service launchctl print Wichtige Unterschiede: Windows verwendet unter anderem die Startarten automatisch, manuell und deaktiviert. systemd unterscheidet den aktuellen Laufzustand von der Aktivierung für den Systemstart. Eine systemd-Unit kann zusätzlich masked sein. Dann kann sie nicht normal gestartet werden. macOS verwendet häufig bedarfsgesteuerte Dienste. Ein launchd-Job muss deshalb nicht dauerhaft als Prozess laufen. launchd unterscheidet verschiedene Ausführungsbereiche, sogenannte Domains. Ein fehlender Prozess bedeutet bei einem bedarfsgesteuerten launchd-Dienst nicht automatisch einen Fehler. 3. Dienststatus unter Windows prüfen muss durch den internen Dienstnamen ersetzt werden. Status eines bestimmten Dienstes: [RO] Get-Service -Name "" Ausgewählte Statusinformationen anzeigen: [RO] Get-Service -Name "" | Select-Object Name, DisplayName, Status, ServiceType Mit einem Teil des Dienstnamens suchen: [RO] Get-Service -Name "**" -ErrorAction SilentlyContinue Mit einem Teil des Anzeigenamens suchen: [RO] Get-Service -DisplayName "**" -ErrorAction SilentlyContinue Alle beendeten Dienste anzeigen: [RO] Get-Service | Where-Object Status -eq "Stopped" | Sort-Object DisplayName Alle laufenden Dienste anzeigen: [RO] Get-Service | Where-Object Status -eq "Running" | Sort-Object DisplayName Dienststatus mit sc.exe abfragen: [RO] sc.exe query "" Erweiterte Statusabfrage einschließlich Prozess-ID: [RO] sc.exe queryex "" Typische Zustände sind: Zustand Bedeutung Running beziehungsweise RUNNING Dienst wird ausgeführt Stopped beziehungsweise STOPPED Dienst wird nicht ausgeführt StartPending beziehungsweise START_PENDING Startvorgang läuft StopPending beziehungsweise STOP_PENDING Beendigung läuft PausePending Pausierung wird vorbereitet Paused Dienst ist pausiert ContinuePending Fortsetzung wird vorbereitet Bleibt ein Dienst ungewöhnlich lange in StartPending oder StopPending , müssen Prozess, Abhängigkeiten und Ereignisprotokolle untersucht werden. Ein erzwungener Abbruch ist nicht der erste Diagnoseschritt. 4. Startart und Dienstkonto unter Windows prüfen Get-Service zeigt den Laufzustand, aber nicht alle Konfigurationsinformationen. Dafür kann die CIM-Klasse Win32_Service verwendet werden. Vollständige Basiskonfiguration eines Dienstes: [RO][SENS] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, DisplayName, State, Status, StartMode, StartName, ProcessId, ExitCode, ServiceSpecificExitCode, PathName Nur Startart und Dienstkonto anzeigen: [RO] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, State, StartMode, StartName Konfiguration mit sc.exe prüfen: [RO][SENS] sc.exe qc "" Typische Werte für StartMode : Wert Bedeutung Auto Automatischer Start Manual Manueller beziehungsweise bedarfsgesteuerter Start Disabled Dienst ist deaktiviert Boot Start durch den Systemlader, normalerweise bei Treibern System Start während der Kernelinitialisierung, normalerweise bei Treibern Typische Angaben von sc.exe qc : Angabe Bedeutung SERVICE_NAME Interner Dienstname TYPE Art des Dienstes oder Treibers START_TYPE Konfigurierte Startart ERROR_CONTROL Verhalten bei Startfehlern während des Systemstarts BINARY_PATH_NAME Programmdatei und Startparameter DEPENDENCIES Konfigurierte Abhängigkeiten SERVICE_START_NAME Verwendetes Dienstkonto [SENS] : Programmpfade und Startparameter können interne Verzeichnisstrukturen, Servernamen oder andere schützenswerte Konfigurationsangaben enthalten. 5. Verzögerten automatischen Start unter Windows prüfen Die Startart Auto allein zeigt nicht immer, ob der automatische Start verzögert erfolgt. Dienstkonfiguration über CIM prüfen: [RO] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, State, StartMode, DelayedAutoStart Interpretation: StartMode DelayedAutoStart Bedeutung Auto False Normaler automatischer Start Auto True Verzögerter automatischer Start Manual False Manueller oder bedarfsgesteuerter Start Disabled False Dienst ist deaktiviert Falls DelayedAutoStart auf dem untersuchten System nicht ausgegeben wird, kann der Wert gezielt in der Dienstkonfiguration der Registrierung geprüft werden: [RO] Get-ItemProperty ` -Path "HKLM:\SYSTEM\CurrentControlSet\Services\" ` -Name DelayedAutoStart ` -ErrorAction SilentlyContinue Dabei gilt üblicherweise: Wert Bedeutung 1 Verzögerter automatischer Start aktiviert 0 oder nicht vorhanden Kein verzögerter Start daraus ableitbar Die Registrierung darf an dieser Stelle nur gelesen werden. Eine Änderung der Startart gehört in ein freigegebenes Änderungsverfahren. 6. Dienststatus unter Linux mit systemd prüfen muss durch den tatsächlichen Unit-Namen ersetzt werden, beispielsweise nginx.service . Ausführlichen Status anzeigen: [RO] systemctl status "" --no-pager Aktuellen Laufzustand abfragen: [RO] systemctl is-active "" Prüfen, ob die Unit für einen automatischen Start aktiviert ist: [RO] systemctl is-enabled "" Prüfen, ob die Unit fehlgeschlagen ist: [RO] systemctl is-failed "" Wichtige Eigenschaften kompakt anzeigen: [RO] systemctl show "" \ --property=Id,Names,LoadState,ActiveState,SubState,UnitFileState,MainPID,ExecMainCode,ExecMainStatus,Result Alle fehlgeschlagenen Units anzeigen: [RO] systemctl --failed --no-pager Laufende Dienste anzeigen: [RO] systemctl list-units \ --type=service \ --state=running \ --no-pager Installierte Service-Unit-Dateien und Aktivierungszustände anzeigen: [RO] systemctl list-unit-files --type=service --no-pager systemctl status zeigt zusätzlich einige aktuelle Protokollzeilen. Für eine vollständige Protokollanalyse wird später gezielt journalctl verwendet. 7. systemd-Zustände richtig interpretieren systemd verwendet mehrere voneinander unabhängige Zustandsangaben. Ladezustand: LoadState Bedeutung loaded Unit-Datei wurde erfolgreich geladen not-found Keine passende Unit-Datei gefunden error Fehler beim Laden masked Unit wurde maskiert und kann nicht normal gestartet werden Aktivzustand: ActiveState Bedeutung active Unit ist aktiv inactive Unit ist nicht aktiv activating Aktivierung läuft deactivating Deaktivierung läuft failed Aktivierung oder Ausführung ist fehlgeschlagen reloading Konfiguration wird neu geladen Typische Aktivierungszustände: systemctl is-enabled Bedeutung enabled Für einen vorgesehenen automatischen Start aktiviert enabled-runtime Nur bis zum nächsten Neustart aktiviert disabled Nicht für automatischen Start aktiviert static Keine eigene Aktivierung über einen Installationsabschnitt; kann abhängig gestartet werden indirect Indirekte Aktivierung über eine andere Unit vorgesehen masked Start vollständig blockiert masked-runtime Bis zum nächsten Neustart maskiert generated Unit wurde dynamisch erzeugt transient Temporäre Unit not-found Unit wurde nicht gefunden Wichtige Kombinationen: Laufzustand Aktivierungszustand Bewertung active enabled Läuft und ist dauerhaft aktiviert inactive enabled Sollte möglicherweise laufen; Start- und Protokollprüfung erforderlich active disabled Wurde manuell, abhängig oder auf anderem Weg gestartet inactive static Kann bei bedarfsgesteuerten oder abhängigen Units normal sein failed beliebig Fehlerursache und Protokolle untersuchen inactive masked Start ist absichtlich blockiert disabled bedeutet nicht automatisch „defekt“. Es bedeutet zunächst nur, dass die Unit nicht über ihre normalen Installationsverknüpfungen für den automatischen Start aktiviert ist. 8. systemd-Unit-Datei und Startbefehl prüfen Wirksame Unit-Datei einschließlich Ergänzungen anzeigen: [RO][FILE][SENS] systemctl cat "" Pfad der geladenen Unit-Datei anzeigen: [RO] systemctl show "" --property=FragmentPath Ergänzende Drop-in-Konfigurationen anzeigen: [RO] systemctl show "" --property=DropInPaths Startbefehl und Dienstkonto anzeigen: [RO][SENS] systemctl show "" \ --property=User,Group,ExecStart,WorkingDirectory,EnvironmentFiles Abhängigkeiten anzeigen: [RO] systemctl list-dependencies "" --no-pager Prüfen, wodurch die Unit für den Systemstart eingebunden ist: [RO] systemctl is-enabled "" Die Ausgabe von systemctl cat kann enthalten: ursprüngliche Unit-Datei, lokale Überschreibungen, Drop-in-Dateien, Start- und Stopbefehle, Dienstkonto, Neustartregeln, Abhängigkeiten, Umgebungsdateien. [SENS] : Unit-Dateien können interne Pfade, Serveradressen oder Umgebungsdateien referenzieren. Die Inhalte von geheimen Umgebungsdateien dürfen nicht ungeprüft in Tickets oder Dokumentationen kopiert werden. 9. Dienststatus unter macOS mit launchd prüfen macOS unterscheidet unter anderem folgende Domains: Domain Bedeutung Beispiel system Systemweite Dienste system/com.example.service user/ Dienste eines Benutzerkontextes user/501/com.example.service gui/ Dienste einer grafischen Anmeldesitzung gui/501/com.example.agent Benutzer-ID des aktuell angemeldeten Terminalbenutzers anzeigen: [RO] id -u Systemweiten Dienst prüfen: [RO] launchctl print "system/