Zugriffsrechte für OUs im Active Directory anzeigen mit PowerShell

    Rechte für OUs delegieren in Active Directory-Benutzer und -ComputerDie Bedeutung eines gewissen­haften Rechte-Manage­ments für das AD und seine Objekte ist unbe­stritten. Unter den Bord­mitteln eignen sich GUI-Tools vor allem für das Zuteilen und Ent­ziehen der Berechtigungen, während Power­Shell besonders flexibel bei der Auswer­tung der ACLs ist.

    Die Delegierung von administrativen Aufgaben an normale Benutzer oder eine inkonsistente Vergabe von Benutzerrechten können dazu führen, dass User oder Gruppen ein Übermaß an Berechtigungen erhalten. Sie sind damit in der Lage, das Active Directory durch unsachgemäße oder böswillige Aktivitäten zu beschädigen oder sich Zugang zu sensiblen Daten zu verschaffen.

    Externe Tools für höhere Ansprüche

    Aus diesem Grund empfiehlt es sich, regelmäßig die Berechtigungs­struktur des AD zu überprüfen. Für diesen Zweck existiert eine Reihe mächtiger Tools von Dritt­anbietern, die auch Änderungen in Echtzeit überwachen können.

    Wer geringere Ansprüche stellt, dem hilft etwa der kosten­lose AD ACL Scanner bei dieser Aufgabe. Es handelt sich dabei um eine GUI für die mitgelieferten PowerShell-Scripts. Allerdings kann man PowerShell auch selbst spontan einsetzen, um Berechtigungen für AD-Objekte abzufragen.

    AD als Laufwerk ansprechen

    In vielen Fällen benötigt man dafür kein Script, vielmehr können oft schon ein paar Befehle auf der Kommandozeile die gewünschten Ergebnisse liefern. Das liegt auch daran, dass man das Active Directory als Laufwerk mounten und einfach durch seine Struktur navigieren kann. Dort lassen sich spezifische Informationen mit Hilfe von mehreren AD-Cmdlets zu Tage fördern.

    Die folgenden Beispiele demonstrieren, wie man anzeigen kann, wer bestimmte Rechte in einer OU hat. Dafür lädt man zuerst das Modul ActiveDirectory und wechselt dann zur gewünschten Domäne im PowerShell-Laufwerk AD:

    Import-Module ActiveDirectory
    cd 'AD:\DC=contoso,DC=de'

    Will man dort zum Beispiel herausfinden, wer Schreibrechte auf die OU Domain Controllers hat, dann gibt man diesen Befehl ein:

    (Get-Acl -Path "OU=Domain Controllers").Access | ? ActiveDirectoryRights -like Write*

    In diesem Aufruf kann beim Parameter Path die Angabe der Domäne entfallen, weil die OU Domain Controllers direkt unterhalb des aktuellen Verzeichnisses liegt und somit ein relativer Pfad ausreicht. Andernfalls müsste man den vollständigen Distinguished Name für die OU in Form von "OU=Domain Controllers,DC=contoso,DC=de" angeben.

    Das Cmdlet Out-GridView stellt den Inhalt der ACL in einer übersichtlichen Form dar.

    Das Fragezeichen steht als Alias für Where-Object und dient dazu, nur jene Einträge anzuzeigen, wo eines der Rechte die Zeichenkette "Write" enthält. Eine übersichtlichere Darstellung erhält man, wenn die Ausgabe des Befehls über eine Pipe an Out-GridView weiterleitet.

    Rekursive Auswertung von OUs

    Wenn man sich nicht mit der Auswertung einer einzelnen OU zufrieden geben will, dann hilft Get-ChildItem dabei, alle OUs einer Domäne rekursiv zu durchlaufen. Der nachgeschaltete Filter schränkt das Ergebnis auf Objekte vom Type OU ein.

    Danach liest die Function Get-OURights nach dem gleichen Muster wie im obigen Befehl die Zugriffsrechte aus, wobei für die Iteration über die einzelnen OUs und deren ACLs verschachtelte foreach-Schleifen dienen.

    Beim Aufruf der Function übergibt man im Parameter $Right den Namen des Privilegs, das man untersuchen möchte. Dabei ist auch die Verwendung des Wildcards '*' zulässig. Die Ausgabe erfolgt im CSV-Format, so dass man die Daten etwa nach Excel übernehmen kann.

    Um zum Beispiel festzustellen, wer in den OUs der Domäne eines der Schreibrechte besitzt, könnte man im AD-Laufwerk zu dieser Domäne wechseln und

    Get-OURights("Write*")

    eingeben. Eine Liste aller Berechtigungen inklusive Erläuterung findet sich auf dieser MSDN-Seite.

    Keine Kommentare