Freigeben über


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 detaillierte Informationen:

Zugriffsrechte für den Dienststeuerungs-Manager

Im Folgenden sind die spezifischen Zugriffsrechte für das 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 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 EnumServicesStatus-- oder EnumServicesStatusEx--Funktion aufzurufen, um die Dienste in der Datenbank auflisten zu können.
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 funktion NotifyBootConfigStatus aufzurufen.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Erforderlich, um die QueryServiceLockStatus--Funktion aufzurufen, um die Sperrstatusinformationen für die Datenbank abzurufen.

Im Folgenden sind die generischen Zugriffsrechte für das 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 den SCM öffnen, der in den funktionen OpenService, EnumServicesStatusExund QueryServiceLockStatus verwendet werden kann. Nur Prozesse mit Administratorrechten können Handles für den SCM öffnen, die vom CreateService- und LockServiceDatabase--Funktionen verwendet werden können.

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

Windows Server 2003 und Windows XP: Im Gegensatz zu den meisten anderen sicherungsfähigen Objekten kann der Sicherheitsdeskriptor für 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
Administratoren
SC_MANAGER_ALL_ACCESS

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

Windows Server 2003 und Windows XP: remote authentifizierten Benutzer erhalten die SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUSund STANDARD_RIGHTS_READ Zugriffsrechte. Diese Zugriffsrechte sind eingeschränkt, wie in der vorherigen Tabelle ab Windows Server 2003 mit SP1 beschrieben

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 gegen den Sicherheitsdeskriptor für das SCM durch, bevor die angeforderten Zugriffsrechte gewährt 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 ChangeServiceConfig-- oder ChangeServiceConfig2--Funktion aufzurufen, um die Dienstkonfiguration zu ändern. Da dies dem Aufrufer das Recht gewährt, die ausführbare Datei zu ändern, die vom System ausgeführt wird, sollte sie nur Administratoren gewährt werden.
SERVICE_ENUMERATE_DEPENDENTS (0x0008) Erforderlich, um die EnumDependentServices--Funktion aufzurufen, um alle vom Dienst abhängigen Dienste aufzählen zu können.
SERVICE_INTERROGATE (0x0080) Erforderlich, um die ControlService--Funktion aufzurufen, um den Dienst aufzufordern, den 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 QueryServiceConfig- und QueryServiceConfig2- funktionen aufzurufen, um die Dienstkonfiguration abzufragen.
SERVICE_QUERY_STATUS (0x0004) Erforderlich, um die QueryServiceStatus-- oder QueryServiceStatusEx--Funktion aufzurufen, um den Dienststeuerungs-Manager zum Status des Diensts zu fragen.
Erforderlich, um die NotifyServiceStatusChange--Funktion aufzurufen, um Benachrichtigungen zu erhalten, wenn ein Dienststatus geändert wird.
SERVICE_START (0x0010) Erforderlich, um die StartService--Funktion aufzurufen, um den Dienst zu starten.
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 QueryServiceObjectSecurity-- oder SetServiceObjectSecurity--Funktion aufzurufen, um auf die SACL zuzugreifen. Die richtige Möglichkeit, diesen Zugriff zu erhalten, besteht darin, die SE_SECURITY_NAMEBerechtigung 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 die Sicherheitsbeschreibung 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 funktion SetServiceObjectSecurity aufzurufen, um die Owner und Group Member des Sicherheitsdeskriptors des Dienstobjekts zu ändern.

Im Folgenden sind 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 erteilt.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 lokalen authentifizierten Benutzern.
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
Administratoren
DELETE-
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

Um Vorgänge auszuführen, muss der Benutzer interaktiv angemeldet sein, oder der Dienst muss eines der Dienstkonten verwenden.

Verwenden Sie zum Abrufen oder Festlegen der Sicherheitsbeschreibung für ein Dienstobjekt die funktionen QueryServiceObjectSecurity und SetServiceObjectSecurity-. 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 auf den Sicherheitsdeskriptor für das Dienstobjekt.

Die Gewährung 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 möglicherweise die Ausführung von Anwendungen unter dem LocalSystem-Konto zu ermöglichen.

Wenn EnumServicesStatusEx-Funktion aufgerufen wird, aufgerufen wird, wenn der Aufrufer nicht über das SERVICE_QUERY_STATUS Zugriffsrecht auf einen Dienst verfügt, wird der Dienst aus der Liste der Dienste, die an den Client zurückgegeben werden, im Hintergrund weggelassen.