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