Die Verwaltung von AD-Gruppen muss nicht in IT-Händen liegen. Die Funktion ‚Gruppen-Manager‘ wird gerne verwendet, wenn ein Nicht-IT-Mitarbeiter im Unternehmen eine Gruppe verwalten soll. So zum Beispiel soll der Abteilungsleiter entscheiden können, welcher Mitarbeiter in einem bestimmten Verteiler (also einer Distribution-Group) enthalten ist.
Index
Manager can update membership list
Dazu kann dieser in der Active Directory Benutzer und Computer Konsole als Manager der Gruppe eingetragen werden und der Haken bei „Manager can update membership list“ gesetzt werden. Der Nutzer kann dann die Mitglieder hinzufügen und entfernen, die Gruppe sonst aber nicht bearbeiten.
Soweit, so einfach. Doch wie funktioniert das, wenn man diese Berechtigung über PowerShell setzen möchte? Das gestaltet sich ein wenig umständlicher.
Gruppen-Manager Berechtigung mit PowerShell
Die Auswahl der Checkbox „Manager can update membership list“ bedeutet nicht einfach das Setzen eines Attributs an der Gruppe. Vielmehr verändert sich dadurch die ACL (Access Control List) der Gruppe. Das kann man auch im Security-Tab der Gruppe sehen. Im Prinzip verhält es sich hier genauso wie mit Berechtigungen auf Ordner.
Gehen wir davon aus, dass unsere Gruppe „VL_ManagerTest“ heißt. Der Nutzer, der Manager werden und die Berechtigungen zum Ändern der Mitglieder erhalten soll, heißt „darth.vader“. In unserem Powershell-Script gehen wir wie folgt vor.
Nutzer als Manager bestimmen
Als erstes setzen wir diesen Nutzer als Manager. Dazu müssen wir das „managedBy“-Attribut der Gruppe füllen. In diesem muss allerdings der distinguishedName des Nutzers stehen. Deswegen müssen wir diesen vorher heraussuchen und dann setzen. Das Skript dazu sieht folgendermaßen aus:
1 2 |
$user = Get-ADUser darth.vader Set-ADGroup „VL_ManagerTest“ -Replace @{managedBy=$user.DistinguishedName} |
Damit haben wir den Manager gesetzt. Jetzt braucht dieser noch die entsprechende Berechtigung.
Erstellen einer AccessRule
Dazu müssen wir eine AccessRule für diesen Nutzer der ACL der Gruppe hinzufügen. Zum Erstellen einer ActiveDirectoryAccessRule brauchen wir dabei vier Informationen:
- Das Schema-Objekt, für das diese AccessRule zutrifft
- Die SID des Nutzers, für den die Regel gilt
- Die Art der Regel (Zulassen/Verweigern)
- Die Rechte, die gesetzt werden sollen
Das Schema-Objekt, das wir hier brauchen ist „Self-Membership“.
Self-Membership
Dieses Objekt hat eine sogenannte „rightsGuid“, die wir für unsere ActiveDirectoryAccessRule brauchen. Die GUID ist über alle ADs gleich und ist in der ADSI-Edit unter
Configuration -> Extended Rights -> Self-Membership -> Properties -> rightsGuid
zu finden. Eine schnelle Google-Suche führt allerdings zum gleichen Ergebnis:
Als erstes also speichern wir uns diese GUID in einer Variablen ab.
1 |
$guid = [guid]'bf9679c0-0de6-11d0-a285-00aa003049e2' |
SID des Nutzers
Die nächste Information, die wir brauchen, ist die SID des Nutzers. Da wir diesen vorhin schon ausgelesen haben, müssen wir nur den Typ von String in SecurityIdentifier umwandeln.
1 |
$sid = [System.Security.Principal.SecurityIdentifier]$user.sid |
Die letzten zwei Informationen sind die Art des Zugriffs und die Rechte, die wir setzen wollen.
Zugriffsrechte des Nutzers
Die Art des Zugriffs ist klar: Es sollen bestimmte Berechtigungen zugelassen werden. Die Berechtigungen, die hier benötigt werden, sind „Write“ und „Extended Rights“. Und so sieht das in PowerShell aus:
1 2 |
$ctrlType = [System.Security.AccessControl.AccessControlType]::Allow $rights = [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty -bor [System.DirectoryServices.ActiveDirectoryRights]::ExtendedRight |
Jetzt, da wir alle benötigten Informationen haben, können wir die Regel erstellen:
1 |
$rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($sid, $rights, $ctrlType, $guid) |
Erstellen einer ActiveDirectoryAccessRule
Im letzten Schritt müssen wir jetzt unsere neu erstellte Regel der ACL der Gruppe hinzufügen. Dazu müssen wir zuerst die vorhandene ACL auslesen:
1 2 3 |
$group = Get-ADGroup „VL_ManagerTest“ $aclPath = "AD:\" + $group.distinguishedName $acl = Get-Acl $aclPath |
Dieser ACL fügen wir unsere neu erstellte Regel hinzu und überschreiben dann die ACL der Gruppe mit unserer modifizierten ACL:
1 2 |
$acl.AddAccessRule($rule) Set-Acl -acl $acl -path $aclPath |
Damit haben wir es geschafft. Nach Aktualisierung sollte in den Eigenschaften der Gruppe unter „managedBy“
- der neue Nutzer stehen und
- der Haken bei „Manager can update membership list“ gesetzt sein.
Gruppenverwaltung an Nicht-IT Mitarbeiter delegieren
Die Bearbeitung von Gruppen kann an einen Gruppen-Manager oder auch eine Gruppe von Personen (z.B. HR) delegiert werden. Es gibt auch einen weiteren, besonders benutzerfreundlicher Weg.
Die Delegation der AD Berechtigungsverwaltung ist mit dem FirstWare IDM-Portal über eine leichtverständliche Web-Oberfläche möglich. In Rollen wird definiert werden, welche Gruppen gesehen oder bearbeitet werden können. Die Rollen selbst werden wiederum auf AD Gruppen gemappt.
Die eigentliche Bearbeitung von Gruppenmitgliedschaften erfolgt dann per Drag n Drop. Wer was sehen und tun darf, wird so eingeschränkt, wie benötigt.
Das IDM-Portal wird von den Machern von active-directory-faq.de entwickelt und ermöglicht u.a. AD Delegation für Anwender.
Das komplette Skript: Gruppen-Manager Berechtigung setzen mit PowerShell
Zum Abschluss hier noch das komplette Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#Manager setzen $user = Get-ADUser darth.vader Set-ADGroup „VL_ManagerTest“ -Replace @{managedBy=$user.DistinguishedName} #RightsGuid $guid = [guid]'bf9679c0-0de6-11d0-a285-00aa003049e2' #SID des Managers $sid = [System.Security.Principal.SecurityIdentifier]$user.sid #ActiveDirectoryAccessRule erstellen $ctrlType = [System.Security.AccessControl.AccessControlType]::Allow $rights = [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty -bor [System.DirectoryServices.ActiveDirectoryRights]::ExtendedRight $rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($sid, $rights, $ctrlType, $guid) #Gruppen-ACL auslesen, neue Regel hinzufügen und ACL der Gruppe überschreiben $group = Get-ADGroup „VL_ManagerTest“ $aclPath = "AD:\" + $group.distinguishedName $acl = Get-Acl $aclPath $acl.AddAccessRule($rule) Set-Acl -acl $acl -path $aclPath |
FirstAttribute AG – Ihr Microsoft Consulting Partner
Wir unterstützen Sie bei Active Directory Fragen.
Nehmen Sie Kontakt zu uns auf.
1 Comment
Leave your reply.