Benutzer-Werkzeuge

Webseiten-Werkzeuge


activedirectory:addelegate

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
activedirectory:addelegate [2016/04/14 16:09] ronnyactivedirectory:addelegate [2016/04/15 13:43] (aktuell) – [funktionierende Powershell-Funktion] ronny
Zeile 1: Zeile 1:
-====== Delegationen setzen ======+====== Delegationen setzen (Powershell) ====== 
 + 
 +===== funktionierende Powershell-Funktion ===== 
 + 
 +<code Powershell> 
 +function setadpermission ([string]$distinguishedName, [string]$Username, [string]$AccessType, [int]$AccessRights, [string]$Inheritance, [string]$objectGuid, [string]$DC, [string]$AdminAccount, [string]$Password) 
 +
 + $ADObject = "AD:\$distinguishedName" 
 + $PW = ConvertTo-Securestring $Password -AsPlainText -force 
 + $Credential = New-Object System.Management.Automation.PSCredential($AdminAccount,$PW) 
 + $Session = New-PSSession -ComputerName $DC -Credential $Credential 
 + Invoke-Command -Session $Session -Command {Import-Module ActiveDirectory} 
 + Invoke-Command -Session $Session -Command {param ($a1) $ADObject = $a1} -ArgumentList $ADObject 
 + Invoke-Command -Session $Session -Command {param ($a1) $Username = $a1} -ArgumentList $UserName 
 + Invoke-Command -Session $Session -Command {param ($a1) $AccessType = $a1} -ArgumentList $AccessType 
 + Invoke-Command -Session $Session -Command {param ($a1) $AccessRights = $a1} -ArgumentList $AccessRights 
 + Invoke-Command -Session $Session -Command {param ($a1) $Inheritance = $a1} -ArgumentList $Inheritance 
 + Invoke-Command -Session $Session -Command {param ($a1) $objectGuid = $a1} -ArgumentList $objectGuid 
 + Invoke-Command -Session $Session -Command {$ArrayAcc = $Username.Split("\")} 
 + Invoke-Command -Session $Session -Command {$Account = New-Object System.Security.Principal.NTAccount($ArrayAcc[0], $ArrayAcc[1])} 
 + Invoke-Command -Session $Session -Command {$ACT = [System.Security.AccessControl.AccessControlType]::$AccessType} 
 + Invoke-Command -Session $Session -Command {$ADR = New-Object System.DirectoryServices.ActiveDirectoryRights} 
 + Invoke-Command -Session $Session -Command {$ADR.value__ = $AccessRights} 
 + Invoke-Command -Session $Session -Command {$Guid = New-Object System.Guid($objectGuid)} 
 + Invoke-Command -Session $Session -Command {$Inherit = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::$Inheritance} 
 + Invoke-Command -Session $Session -Command {$NewRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($Account,$ADR,$ACT,$Guid,$Inheritance)} 
 + Invoke-Command -Session $Session -Command {$acl = get-acl $ADObject}  
 + Invoke-Command -Session $Session -Command {$acl.addaccessrule($NewRule)}  
 + Invoke-Command -Session $Session -Command {Set-ACL $ADObject $acl} 
 + Remove-PSSession $Session 
 +
 +</code> 
 + 
 +^Parameter^Inhalt^ 
 +|distinguishedName|DistinguishedName des Objekts, auf dem Berechtigungen gesetzt werden sollen| 
 +|Username|Objekt, das berechtigt werden soll im Format **NetBiosDomain\SamAccountName**. Entgegen des Parameternamens können z.B. auch Gruppen berechtigt werden.| 
 +|AccessType|**Allow** oder **Deny**| 
 +|AccessRights|Integerzahl. Wie man an die Zahl kommt, steht im nächsten Abschnitt| 
 +|Inheritance|Vererbungsregel. Folgende Werte sind erlaubt:\\ **None**: Keine Vererbung\\ **All**: Die Regel gilt für das Objekt selbst seine Kind-Objekte und dessen Kind-Objekte und so weiter, bis alle untergeordneten Objekte erfasst sind\\ **Children**: Nur die direkten Kind-Objekte\\ **Descendents**: Nur die direkt untergeordneten Objekte und deren Kind-Objekte\\ **SelfAndChildren**: Nur das Objekt selbst und dessen direkt untergeordneten Objekte| 
 +|objectGuid|Berechtigungsschema, welche Attribute der betroffenen AD-Objekte verändert werden dürfen. Näheres dazu im übernächsten Abschnitt| 
 +|DC|Domänencontroller| 
 +|AdminAccount|Ein Benutzer mit Adminrechten für die Domäne. Muss im Format **NetBiosName\SamAccountName** angegeben werden| 
 +|Password|Das Passwort des Adminbenutzers| 
 + 
 +**WICHTIG** Scripte, die diese Funktion verwenden, sollten nur in einem gut geschützten Bereich abgelegt werden, da das Passwort da noch unverschlüsselt ist. Ich werde das später mal umbauen ((Man kann Passwörter wohl auch verschlüsselt speichern. Mehr dazu gibt es [[http://www.hobmaier.net/2015/05/passworter-in-powershell-verschlusseln.html|hier]]))! 
 + 
 +Dieses Script erzeugt eine PSSession, übergibt dann dem angegebenen Domänencontroller alle wichtigen Werte. Anschließend holt es sich die Sicherheitsbeschreibung des angegebenen AD-Objekts, fügt eine Sicherheitsregel hinzu und schreibt die erweiterte Sicherheitsbeschreibung zurück. Abschließend wird die PSSession zerstört. 
 + 
 +===== Die ActiveDirectoryRights bestimmen ===== 
 + 
 +Suche oder erstelle dir mit den grafischen Werkzeugen die benötigte Delegation beispielhaft an einem AD-Objekt. 
 + 
 +Dann gehts weiter in der Powershell: 
 + 
 +<code Powershell> 
 +Import-Module ActiveDirectory 
 +</code> 
 + 
 +Importiert die ActiveDirectory-bezogenen Cmdlets der Powershell und bindet die Active Directory als PSDrive AD: ein. Müssen ggf. durch die RSAT-Werkzeuge nachinstalliert werden. 
 + 
 +<code Powershell> 
 +$ACL = Get-Acl AD:\'DistinguishedNameDesADOjektsMitDenRichtigenRechten' 
 +</code> 
 + 
 +Ruft die Sicherheitsbeschreibung des gewünschten Objekts ab 
 + 
 +<code Powershell> 
 +$ACL.Access | ?{$_.IdentityReference -eq "Netbios\SamAccountName"
 +</code> 
 + 
 +Ruft alle Sicherheitsregeln (ACE) ab, die für den Benutzer Netbios\SamAccountName vorhanden sind und sieht in etwa so aus: 
 + 
 +<code> 
 +PS C:\> $ACL.Access | ?{$_.IdentityReference -eq "Dom\TestGroup"
 + 
 + 
 +ActiveDirectoryRights : ReadProperty, WriteProperty 
 +InheritanceType       : All 
 +ObjectType            : bf9679c0-0de6-11d0-a285-00aa003049e2 
 +InheritedObjectType   : 00000000-0000-0000-0000-000000000000 
 +ObjectFlags           : ObjectAceTypePresent 
 +AccessControlType     : Allow 
 +IdentityReference     : DOM\TestGroup 
 +IsInherited           : False 
 +InheritanceFlags      : ContainerInherit 
 +PropagationFlags      : None 
 +</code> 
 + 
 +Der erforderliche Wert steckt in der Zeile **ActiveDirectoryRights**. Wir speichern die Sicherheitsregel in einer eigenen Variablen, um leichter darauf zugreifen zu können: 
 + 
 +<code Powershell> 
 +$ExampleRule = $ACL.Access | ?{$_.IdentityReference -eq "Dom\TestGroup"
 +</code> 
 + 
 +Wenn es mehrere Regeln für den User/die Gruppe gibt, ist ExampleRule ein Array. In diesem Fall kann man die erste Sicherheitsregel mit $ExampleRule[0], die zweite mit $ExampleRule[1] (usw.) abrufen. Wir gehen hier davon aus, dass nur eine Regel gefunden wurde: 
 + 
 +<code Powershell> 
 +$ExampleRule.ActiveDirectoryRights.value__ 
 +</code> 
 + 
 +Als Ergebnis erhält man eine Zahlenausgabe, die in die oben beschriebene Funktion angegeben werden kann.  
 + 
 +===== ObjectType ermitteln ===== 
 + 
 +Das ObjectType ist eine maskierung, für welche AD-Attribute die in der Sicherheitsregel beschriebenen Rechte gelten sollen. Soll die Berechtigung für alle Attribute gelten, nimmt man den String **00000000-0000-0000-0000-000000000000** 
 + 
 +Andernfalls kann man sich ein Testobjekt erzeugen, dem mit grafischen Werkzeugen die gewünschte Delegation vergeben, und sich die Sicherheitsregel wie weiter oben beschrieben holen. Dort steht der angepasste ObjectType dann in der entsprechenden Zeile. 
 +===== Altes Zeugs (Recherche und so) ===== 
  
 **Berechtigungen abrufen:**  **Berechtigungen abrufen:** 
Zeile 37: Zeile 145:
 New-Object System.DirectoryServices.ActiveDirectoryAccessRule($account,$adr,$act,$ot,$inherit) New-Object System.DirectoryServices.ActiveDirectoryAccessRule($account,$adr,$act,$ot,$inherit)
 </code> </code>
 +
 +führt zu folgender ACE:
 +
 +<code>
 +ActiveDirectoryRights : ReadProperty, WriteProperty
 +InheritanceType       : All
 +ObjectType            : bf9679c0-0de6-11d0-a285-00aa003049e2
 +InheritedObjectType   : 00000000-0000-0000-0000-000000000000
 +ObjectFlags           : ObjectAceTypePresent
 +AccessControlType     : Allow
 +IdentityReference     : EVV\rkaufmann
 +IsInherited           : False
 +InheritanceFlags      : None
 +PropagationFlags      : None
 +</code>
 +
 +Das ist genau die ACE, die eine BErechtigung zum Lesen und Schrreiben von Mitgliedern einer Gruppe benötigt wird. Ausschlaggebend ist die Eigenschaft ObjectType, die auf ein Object im AD-Schema verweist. Infos dazu gibt es hier:
 +
 +  * [[https://msdn.microsoft.com/de-de/library/windows/desktop/ms675767%28v=vs.85%29.aspx]]
 +  * [[https://msdn.microsoft.com/de-de/library/system.directoryservices.activedirectoryaccessrule%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1]]
  
 {{tag>[AD Powershell Delegation ACL]}} {{tag>[AD Powershell Delegation ACL]}}
  
  
activedirectory/addelegate.1460642952.txt.gz · Zuletzt geändert: 2016/04/14 16:09 von ronny

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki