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 |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
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 |
|
Lokal authentifizierte Benutzer (einschließlich LocalService und NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Administratoren |
|
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 |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_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) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Administratoren |
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.