Dienstsicherheit und Zugriffsrechte

Mit dem Windows-Sicherheitsmodell können Sie den Zugriff auf den Dienststeuerungs-Manager (Service Control Manager, SCM) und Dienstobjekte steuern. Die folgenden Abschnitte enthalten ausführliche Informationen:

Zugriffsrechte für den Dienststeuerungs-Manager

Im Folgenden sind die spezifischen Zugriffsrechte für den SCM aufgeführt.

Zugriffsrecht BESCHREIBUNG
SC_MANAGER_ALL_ACCESS (0xF003F) Enthält zusätzlich zu allen Zugriffsrechten in dieser Tabelle STANDARD_RIGHTS_REQUIRED.
SC_MANAGER_CREATE_SERVICE (0x0002) Erforderlich, um die CreateService-Funktion aufzurufen, um ein Dienstobjekt zu erstellen und es der Datenbank hinzuzufügen.
SC_MANAGER_CONNECT (0x0001) Erforderlich, um eine Verbindung mit dem Dienststeuerungs-Manager herzustellen.
SC_MANAGER_ENUMERATE_SERVICE (0x0004) Erforderlich, um die Funktion EnumServicesStatus oder EnumServicesStatusEx aufzurufen, um die Dienste aufzulisten, die sich in der Datenbank befinden.
Erforderlich, um die NotifyServiceStatusChange-Funktion aufzurufen, um Benachrichtigungen zu erhalten, wenn ein Dienst erstellt oder gelöscht wird.
SC_MANAGER_LOCK (0x0008) Erforderlich, um die LockServiceDatabase-Funktion aufzurufen, um eine Sperre für die Datenbank abzurufen.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) Erforderlich, um die NotifyBootConfigStatus-Funktion aufzurufen.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Erforderlich, um die QueryServiceLockStatus-Funktion aufzurufen, um die Sperr-status Informationen für die Datenbank abzurufen.

Im Folgenden sind die generischen Zugriffsrechte für den SCM aufgeführt.

Zugriffsrecht BESCHREIBUNG
GENERIC_READ
STANDARD_RIGHTS_READ
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SC_MANAGER_CREATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SC_MANAGER_CONNECT
SC_MANAGER_LOCK
GENERIC_ALL
SC_MANAGER_ALL_ACCESS

Ein Prozess mit den richtigen Zugriffsrechten kann ein Handle für die SCM öffnen, das in den Funktionen OpenService, EnumServicesStatusEx und QueryServiceLockStatusStatus verwendet werden kann. Nur Prozesse mit Administratorrechten können Handles für den SCM öffnen, die von den Funktionen CreateService und LockServiceDatabase verwendet werden können.

Das System erstellt den Sicherheitsdeskriptor für den SCM. Um die Sicherheitsbeschreibung für den SCM abzurufen oder festzulegen, verwenden Sie die Funktionen QueryServiceObjectSecurity und SetServiceObjectSecurity mit einem Handle für das SCManager-Objekt.

Windows Server 2003 und Windows XP: Im Gegensatz zu den meisten anderen sicherungsfähigen Objekten kann die Sicherheitsbeschreibung für den SCM nicht geändert werden. Dieses Verhalten hat sich seit Windows Server 2003 mit Service Pack 1 (SP1) geändert.

Die folgenden Zugriffsrechte werden gewährt.

Konto Zugriffsrechte
Remote authentifizierte Benutzer
SC_MANAGER_CONNECT
Lokal authentifizierte Benutzer (einschließlich LocalService und NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Administrators
SC_MANAGER_ALL_ACCESS

Beachten Sie, dass Remotebenutzer, die sich über das Netzwerk authentifiziert, aber nicht interaktiv angemeldet sind, eine Verbindung mit dem SCM herstellen können, aber keine Vorgänge ausführen können, die andere Zugriffsrechte erfordern. Zum Ausführen dieser Vorgänge muss der Benutzer interaktiv angemeldet sein, oder der Dienst muss eines der Dienstkonten verwenden.

Windows Server 2003 und Windows XP: Remote authentifizierten Benutzern werden die Zugriffsrechte SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS und STANDARD_RIGHTS_READ erteilt. Diese Zugriffsrechte sind wie in der vorherigen Tabelle beschrieben ab Windows Server 2003 mit SP1 eingeschränkt.

Wenn ein Prozess die OpenSCManager-Funktion verwendet, um ein Handle für eine Datenbank mit installierten Diensten zu öffnen, kann er Zugriffsrechte anfordern. Das System führt eine Sicherheitsüberprüfung für den Sicherheitsdeskriptor für den SCM durch, bevor die angeforderten Zugriffsrechte erteilt werden.

Zugriffsrechte für einen Dienst

Im Folgenden sind die spezifischen Zugriffsrechte für einen Dienst aufgeführt.

Zugriffsrecht BESCHREIBUNG
SERVICE_ALL_ACCESS (0xF01FF) Enthält zusätzlich zu allen Zugriffsrechten in dieser Tabelle STANDARD_RIGHTS_REQUIRED.
SERVICE_CHANGE_CONFIG (0x0002) Erforderlich, um die Funktion ChangeServiceConfig oder ChangeServiceConfig2 aufzurufen, um die Dienstkonfiguration zu ändern. Da dies dem Aufrufer das Recht einräumt, die ausführbare Datei zu ändern, die das System ausführt, sollte sie nur Administratoren gewährt werden.
SERVICE_ENUMERATE_DEPENDENTS (0x0008) Erforderlich, um die EnumDependentServices-Funktion aufzurufen, um alle vom Dienst abhängigen Dienste aufzulisten.
SERVICE_INTERROGATE (0x0080) Erforderlich, um die ControlService-Funktion aufzurufen, um den Dienst aufzufordern, seine status sofort zu melden.
SERVICE_PAUSE_CONTINUE (0x0040) Erforderlich, um die ControlService-Funktion aufzurufen, um den Dienst anzuhalten oder fortzusetzen.
SERVICE_QUERY_CONFIG (0x0001) Erforderlich, um die Funktionen QueryServiceConfig und QueryServiceConfig2 zum Abfragen der Dienstkonfiguration aufzurufen.
SERVICE_QUERY_STATUS (0x0004) Erforderlich, um die Funktion QueryServiceStatus oder QueryServiceStatusEx aufzurufen, um den Dienststeuerungs-Manager nach der status des Diensts zu fragen.
Erforderlich, um die Funktion NotifyServiceStatusChange aufzurufen, um Benachrichtigungen zu erhalten, wenn sich ein Dienst status ändert.
SERVICE_START (0x0010) Erforderlich, um die StartService-Funktion zum Starten des Diensts aufzurufen.
SERVICE_STOP (0x0020) Erforderlich, um die ControlService-Funktion aufzurufen, um den Dienst zu beenden.
SERVICE_USER_DEFINED_CONTROL(0x0100) Erforderlich, um die ControlService-Funktion aufzurufen, um einen benutzerdefinierten Steuerelementcode anzugeben.

Im Folgenden sind die Standardzugriffsrechte für einen Dienst aufgeführt.

Zugriffsrecht BESCHREIBUNG
ACCESS_SYSTEM_SECURITY Erforderlich, um die Funktion QueryServiceObjectSecurity oder SetServiceObjectSecurity für den Zugriff auf die SACL aufzurufen. Die richtige Möglichkeit, diesen Zugriff zu erhalten, besteht darin, die SE_SECURITY_NAME-Berechtigung im aktuellen Zugriffstoken des Aufrufers zu aktivieren, das Handle für ACCESS_SYSTEM_SECURITY Zugriff zu öffnen und dann die Berechtigung zu deaktivieren.
DELETE (0x10000) Erforderlich, um die DeleteService-Funktion aufzurufen, um den Dienst zu löschen.
READ_CONTROL (0x20000) Erforderlich, um die QueryServiceObjectSecurity-Funktion aufzurufen, um den Sicherheitsdeskriptor des Dienstobjekts abzufragen.
WRITE_DAC (0x40000) Erforderlich, um die SetServiceObjectSecurity-Funktion aufzurufen, um den Dacl-Member des Sicherheitsdeskriptors des Dienstobjekts zu ändern.
WRITE_OWNER (0x80000) Erforderlich, um die SetServiceObjectSecurity-Funktion aufzurufen, um die Besitzer- und Group-Mitglieder des Sicherheitsdeskriptors des Dienstobjekts zu ändern.

Im Folgenden werden die generischen Zugriffsrechte für einen Dienst aufgeführt.

Zugriffsrecht BESCHREIBUNG
GENERIC_READ
STANDARD_RIGHTS_READ
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SERVICE_CHANGE_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SERVICE_START
SERVICE_STOP
SERVICE_PAUSE_CONTINUE
SERVICE_USER_DEFINED_CONTROL

Der SCM erstellt den Sicherheitsdeskriptor eines Dienstobjekts, wenn der Dienst von der CreateService-Funktion installiert wird. Der Standardsicherheitsdeskriptor eines Dienstobjekts gewährt den folgenden Zugriff.

Konto Zugriffsrechte
Remote authentifizierte Benutzer Standardmäßig nicht gewährt. Windows Server 2003 mit SP1: SERVICE_USER_DEFINED_CONTROL
Windows Server 2003 und Windows XP: Die Zugriffsrechte für remote authentifizierte Benutzer sind identisch mit denen für lokal authentifizierte Benutzer.
Lokal authentifizierte Benutzer (einschließlich LocalService und NetworkService)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_USER_DEFINED_CONTROL
LocalSystem
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_PAUSE_CONTINUE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
Administrators
DELETE
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

Zum Ausführen von Vorgängen muss der Benutzer interaktiv angemeldet sein, oder der Dienst muss eines der Dienstkonten verwenden.

Verwenden Sie die Funktionen QueryServiceObjectSecurity und SetServiceObjectSecurity , um den Sicherheitsdeskriptor für ein Dienstobjekt abzurufen oder festzulegen. Weitere Informationen finden Sie unter Ändern der DACL für einen Dienst.

Wenn ein Prozess die OpenService-Funktion verwendet, überprüft das System die angeforderten Zugriffsrechte mit dem Sicherheitsdeskriptor für das Dienstobjekt.

Das Gewähren bestimmter Zugriffsrechte für nicht vertrauenswürdige Benutzer (z. B. SERVICE_CHANGE_CONFIG oder SERVICE_STOP) kann es ihnen ermöglichen, die Ausführung Ihres Diensts zu beeinträchtigen und ihnen möglicherweise die Ausführung von Anwendungen unter dem LocalSystem-Konto zu ermöglichen.

Wenn die EnumServicesStatusEx-Funktion aufgerufen wird und der Aufrufer nicht über das SERVICE_QUERY_STATUS Zugriffsrecht für einen Dienst verfügt, wird der Dienst in der Liste der an den Client zurückgegebenen Dienste im Hintergrund ausgelassen.