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 |
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 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 |
|
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 |
Administrators |
|
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 |
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 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) |
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 |
Administrators |
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.