Searching for delegated rights in AD

By Andrei Ungureanu - Last updated: Tuesday, December 8, 2009 - Save & Share - Leave a Comment

 

Scopul scriptului care il voi prezenta mai jos este de a cauta in Active Directory dupa delegarile facute la nivel de Organizational Unit-uri. Intr-un domeniu in care facem delegari pentru alti admini, daca acestea nu sunt documentate si sunt facute folosind useri si nu de grupuri, in timp sunt uitate iar userul va avea acces in continuare la resursele delegate chiar daca nu face parte din grupurile de administratori.

Scriptul arata cam asa:

‘Script created by Andrei Ungureanu
‘www.winadmin.ro

On error resume next
Const ADS_SCOPE_SUBTREE = 2
Const ADS_ACEFLAG_INHERITED_ACE = &H10

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
    "Select Name, distinguishedName from ‘LDAP://DC=itboard,DC=local’ " _
        & "Where objectClass=’organizationalUnit’" 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
        strOU = objRecordSet.Fields("distinguishedName") 
Set ObjUser = GetObject("LDAP://" & strOU)
Set objsd = objUser.Get("ntSecurityDescriptor")
Set dacl = objsd.DiscretionaryAcl

For Each ace In dacl
If ace.Trustee = "ITBOARD\andreiu" Then
    iAceFlags = ace.AceFlags

        If(iAceFlags And ADS_ACEFLAG_INHERITED_ACE)Then
         Exit For
        End If

    wscript.echo strOU
    Exit For
End If
next

    objRecordSet.MoveNext
Loop

E nevoie sa inlocuiti in script ITBOARD\andreiu cu userul pe care il cautati si la fel numele domeniului din dc=itboard,dc=local in numele domeniului pe care rulati scriptul. Scriptul va verifica toata ierarhia de OU-uri si va afisa doar locatiile in care userul are permisiuni (daca exista deja permisiuni mostenite de la un OU parinte nu va mai verifica alte permisiuni pe acel OU).

Atentie ca numele userului si domeniul sunt case sensitive. Acestea trebuie puse in script exact asa cum apar in proprietatile userului:

image

Scriptul nu este bullet proof si e posibila sa existe cazuri in care sa nu detecteze tot. Pentru a-i imbunatati viteza am decis sa fac skip la OU-urile unde exista deja drepturi mostenite pentru acel user.

PS: Atentie ca scripturile postate aici sunt modificate de wordpress si anumite caractere trebuie modificate de mana cand faceti copy/paste la script.

Posted in Scripting • Tags: , Top Of Page

Write a comment