none
Active Directory Berechtigungen dokumentieren RRS feed

  • Frage

  • Hallo,

    kann mann die Effektiven Berechtigungen eines Users für die Domäne im AD per z.B. Powershell dokumentieren?

    Also die Rechte z. B. "neues Computerkonto erstellen" usw.

    Vielen Dank

    Stavros

    Donnerstag, 30. Juni 2011 09:14

Antworten

  • Grundsätzlich geht das auch ohne Zusatztools:

     

    $username = "proftest"
    Add-Type -AssemblyName System.DirectoryServices.AccountManagement
    $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
    $user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ct,$username)
    $groups = $user.GetAuthorizationGroups() 
    
    $ADsearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $ADsearcher.Filter = "(objectcategory=OrganizationalUnit)"
    $allobj = $ADsearcher.findall()
     
    foreach ($obj in $allobj) {
    	 $permissions = $obj.GetDirectoryEntry().get_ObjectSecurity().Access 
    	 foreach ($permission in $permissions) { 
    	 $id = $permission.IdentityReference.tostring().split("\")[1]
     	  if ( $id -eq $username) { 
    		 Write-Host "~~~~~~~~~~~~~~~~~`rObject:" $obj.properties.name "/ " $obj.properties.objectclass "/ " $permission.ObjectType "/ " $permission.inheritedObjectType
    		 Write-host $permission.IdentityReference " : " $permission.ActiveDirectoryRights " (" $permission.AccessControlType ")" 
    		}
    	 	foreach ($group in $groups) {
    			if ( $id -eq $group.name) {
    			 Write-Host "~~~~~~~~~~~~~~~~~`rObject:" $obj.properties.name "/ " $obj.properties.objectclass "/ "$permission.ObjectType "/ " $permission.inheritedObjectType
    			 Write-host $permission.IdentityReference " : " $permission.ActiveDirectoryRights " (" $permission.AccessControlType ")" 
    			}
    	 }	
     	}
    }
    


    Damit listest du alle Rechte auf AD-Objekte die ein User direkt oder über Gruppenmitgliedschaften erhalten hat. Ohne Filterung nach bestimmten Objekten, Gruppentiefe und bestimmten Rechten macht das in der Praxis aber keinen Sinn, da die Liste z.b. nur der Leserechte außerordentlich lang werden kann. :)
    Das gilt allerdings auch für LIZA und dcacls.

     

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/

    Sonntag, 10. Juli 2011 01:41

Alle Antworten

  • Hallo,

    an Boardmitteln kenne ich dafür nur dcacls ...
    http://support.microsoft.com/kb/281146/en-us

    Es gibt aber dritthersteller die das ermöglichen und sogar hübsch aufbereiten. Ich verweise da gerne auf Quest ...


    Viele Grüße Carsten
    Donnerstag, 30. Juni 2011 14:31
  • Hi,

    Am 30.06.2011 11:14, schrieb stavrostz-duhb:

    kann mann die Effektiven Berechtigungen eines Users für die Domäne im AD per z.B. Powershell dokumentieren?

    Liza von http://www.ldapexplorer.com/en/freetools.htm sollte das auch
    können.

    Tschö
    Mark


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:       www.gruppenrichtlinien.de - deutsch
    GPO Tool:       www.reg2xml.com - Registry Export File Converter
    NetworkTrayTool www.gruppenrichtlinien.de/tools/Networktraytool.htm

    Donnerstag, 30. Juni 2011 16:15
  • Grundsätzlich geht das auch ohne Zusatztools:

     

    $username = "proftest"
    Add-Type -AssemblyName System.DirectoryServices.AccountManagement
    $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
    $user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ct,$username)
    $groups = $user.GetAuthorizationGroups() 
    
    $ADsearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $ADsearcher.Filter = "(objectcategory=OrganizationalUnit)"
    $allobj = $ADsearcher.findall()
     
    foreach ($obj in $allobj) {
    	 $permissions = $obj.GetDirectoryEntry().get_ObjectSecurity().Access 
    	 foreach ($permission in $permissions) { 
    	 $id = $permission.IdentityReference.tostring().split("\")[1]
     	  if ( $id -eq $username) { 
    		 Write-Host "~~~~~~~~~~~~~~~~~`rObject:" $obj.properties.name "/ " $obj.properties.objectclass "/ " $permission.ObjectType "/ " $permission.inheritedObjectType
    		 Write-host $permission.IdentityReference " : " $permission.ActiveDirectoryRights " (" $permission.AccessControlType ")" 
    		}
    	 	foreach ($group in $groups) {
    			if ( $id -eq $group.name) {
    			 Write-Host "~~~~~~~~~~~~~~~~~`rObject:" $obj.properties.name "/ " $obj.properties.objectclass "/ "$permission.ObjectType "/ " $permission.inheritedObjectType
    			 Write-host $permission.IdentityReference " : " $permission.ActiveDirectoryRights " (" $permission.AccessControlType ")" 
    			}
    	 }	
     	}
    }
    


    Damit listest du alle Rechte auf AD-Objekte die ein User direkt oder über Gruppenmitgliedschaften erhalten hat. Ohne Filterung nach bestimmten Objekten, Gruppentiefe und bestimmten Rechten macht das in der Praxis aber keinen Sinn, da die Liste z.b. nur der Leserechte außerordentlich lang werden kann. :)
    Das gilt allerdings auch für LIZA und dcacls.

     

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/

    Sonntag, 10. Juli 2011 01:41
  • Vielen Dank!

     

    Gruß

    Stavros

    Montag, 11. Juli 2011 12:57