Service Control Manager
Remotezugriff auf die Dienste eines Windows Server 2003 SP1 System,

Verfasser: Norbert Fehlauer

Im How To Zentrale Steuerung und Vergabe von lokalen Sicherheitseinstellungen hat Mark unter anderem erläutert, wie man Berechtigungen auf einzelne Dienste von Windows Systemen vergeben kann. Ziel solcher Bemühungen ist es im Normalfall, den verantwortlichen Systemnutzern nur die notwendigen Rechte zu geben. Mit dem Erscheinen von Windows Server 2003 Service Pack 1 hat Microsoft jedoch viele Sicherheitseinstellungen, die teilweise seit Windows NT 4.0 Bestand haben geändert. So ist es zum Beispiel nach der Installation von Service Pack 1 den Authentifizierten Usern nicht mehr gestattet, remote auf den Dienststeuerungs-Manager (Service Control Manager) zuzugreifen. Dies wird jedoch benötigt, damit die per Gruppenrichtlinie vergebenen Berechtigungen (Starten/Stoppen) von einzelnen Diensten mittels angepasster MMC überhaupt funktionieren.

Die Lösung hat Microsoft selbst in der Knowledge Base dokumentiert. Diese Lösung erreicht allerdings ihre Grenze, wenn es um mehr als "ein paar" Server geht. Zudem ist die SDDL Syntax auf den ersten Blick nicht so leicht verständlich, sodass die Lösung so nicht ohne weiteres umzusetzen ist. Nachfolgend soll deshalb eine Lösung geboten werden, die zwei Ziele verfolgt.

 

1. Es sollen die verstärkten Sicherheitseinstellungen von Service Pack 1 nicht zurückgesetzt, sondern ergänzt werden.
2. Eine möglichst automatisierte Anwendung von Punkt 1 in großen Umgebungen.
 
SP1 Berechtigungen auf den Dienstesteuerungs-Manager:
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
 
RTM Berechtigungen auf den Dienstesteuerungs-Manager:
D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
 
Zusätzlich zu den obigen Berechtigungen des SP1 soll eine Domänengruppe Dienstezugriff die Berechtigungen erhalten, welche Authentifizierten Benutzer unter Windows Server 2003 RTM haben.

Zur Veranschaulichung sind nachfolgend die relevanten Bereiche noch einmal dargestellt.

Mit Hilfe des Befehlszeilenprogramms dsget lässt sich die SID der Gruppe Dienstezugriff auslesen.
C:\>dsget group -sid "CN=Dienstezugriff,OU=Security,OU=Groups,DC=AD,DC=MYDOMAIN,DC=COM"
sid
S-1-5-21-1707875768-2122871152-1233803906-5900
dsget war erfolgreich
 
Dienstezugriff
(A;;CCLCRPRC;;;S-1-5-21-1707875768-2122871152-1233803906-5900)
 
Authentifizierte Benutzer unter Windows Server 2003 Service Pack 1
(A;;CCLCRPRC;;;AU)
 
Authentifizierte Benutzer unter Windows Server 2003 RTM
(A;;CC;;;AU)
 
Mittels sc sdset werden die neuen Berechtigungen gesetzt:
C:\>sc sdset SCMANAGER D:(A;;CCLCRPRC;;;S-1-5-21-1707875768-2122871152-1233803906-5900)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
Automatisiert werden kann dies durch Anwendung des nachfolgenden VB-Skriptes in einem Computerstartskripts.

 

Skript von: http://blog.joeware.net/2005/06/12/36/ (modifiziert)
Das Skript wird nur auf Computern mit Windows Server 2003 und Servicepack 1 ausgeführt. Innerhalb des Skriptes erfolgt die Prüfung ob ein erneutes Anwenden der Berechtigungsanpassung erforderlich ist. Hierzu wird beim erstmaligen Ausführen des Skriptes ein Registrywert Dienstezugriff (Reg_SZ) unter HKLM\Software\SDDLScript angelegt. Ist dieser Wert bereits vorhanden, dann wird das Skript abgebrochen. Das erfolgreiche Anwenden der Berechtigungen wird außerdem im Anwendungsprotokoll vermerkt.
 
Abbildung 1: Ereignisprotokolleintrag bei erstmaligem Ausführen
Abbildung 2: Erfolgreiche Ausführung wird im Anwendungsprotokoll erfasst
----- script -----
Set WshShell = WScript.CreateObject("WScript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\root\cimv2")
Set objOS = objWMIService.InstancesOf("Win32_OperatingSystem")

Dim blnIsWin2003Sp1

strSDDL = "D:(A;;CCLCRPRC;;; S-1-5-21-1707875768-2122871152-1233803906-5900)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"

For Each OS In objOS
	If OS.primary Then		
		If Left(OS.Version, 3)  = "5.2" And (OS.ServicePackMajorVersion = 1) Then
			blnIsWin2003Sp1 = True
			Exit For
		End If
	End If
Next

If blnIsWin2003Sp1 Then
On Error Resume Next

If WshShell.RegRead ("HKLM\Software\SDDLScript\DiensteZugriff") = False Then

WshShell.LogEvent 4, "SDDL Skript wurde auf diesem Computer noch nicht ausgeführt."

Dim temp
temp = "sc \\" & strComputer &  " SDSet SCManager " & strSDDL
WshShell.RegWrite ("HKLM\Software\SDDLScript\DiensteZugriff"), "TRUE", "REG_SZ"

Return = WshShell.run(temp,1,True)

If Return=1 Then

objShell.LogEvent 1, "Änderung der Dienststeuerungs-Manager Berechtigungen fehlgeschlagen."
Else
WshShell.LogEvent 0, " Dienststeuerungs-Manager Berechtigungen wurden erfolgreich geändert."
End If
Set objShell = Nothing
End If

End If
WScript.Quit(0)
----- script -----
 
Das Skript kann, nach entsprechender Abänderung der Abfrage, auch für die Absicherung von Servern ohne Servicepack 1 genutzt werden.
 
Ich übernehme jedoch keine Funktionsgarantie. Nach der Anwendung des Skriptes ist es den Mitgliedern der Gruppe DiensteZugriff möglich, remote auf den Dienstesteuerung-Manager zuzugreifen. Die Berechtigungsvergabe auf einzelne Dienste muss zusätzlich erfolgen.




(c) 2003 - heute, Mark Heitbrink, weitere Informationen unter WebSite-Info\Copyright