violak
Goto Top

Powershell Organisationseinheit rechte für Gruppe vergeben

Hallo zusammen,

ich kämpfe gerade damit einer bestimmten Gruppe die Rechte auf eine OU im AD zu entziehen.

Als Script verwende ich folgendes:

$dn  = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'  
$sid = New-Object System.Security.Principal.SecurityIdentifier (Get-ADGroup "LDAP-FirmaA").SID.Value  

$acl = Get-Acl -Path "AD:$dn"  


$acl.SetAccessRuleProtection($true, $true)  # remove inheritance
$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"Full","Deny","None","All"))  

Set-Acl -Path "AD:$dn" -AclObject $acl  


Die Fehlermeldung, welche zurückkommt ist:

New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".

Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?

Ich weiß aber nicht wie ich das Problem lösen kann.

Die Gruppe soll komplett auf FullControl = Deny stehen und nur auf diese Ou (nicht auf die darunter) angewendet werden.

Könnt Ihr mir da weiterhelfen?

Content-ID: 618507

Url: https://administrator.de/forum/powershell-organisationseinheit-rechte-fuer-gruppe-vergeben-618507.html

Ausgedruckt am: 24.12.2024 um 13:12 Uhr

emeriks
emeriks 02.11.2020, aktualisiert am 03.11.2020 um 08:23:08 Uhr
Goto Top
Hi,
Zitat von @violak:
Die Fehlermeldung, welche zurückkommt ist:
New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?
Nein, das bezieht sich rein auf die Interpretation dieser Kommandozeile (Zeile 8). Nicht auf die Ausführung.

E.

Edit:
Die solltest diese 5 Argumente vorher explizit als Variablen deklarieren und füllen, unter expliziter Angabe des Datentyps. Sodass einer von den drei Constructors eindeutig zugeordnet werden kann.


ActiveDirectoryAccessRule Constructors
siehe "Overloads"
violak
violak 02.11.2020 um 21:21:52 Uhr
Goto Top
Guten Abend,

sorry aber ich finde da nichts was mir da weiterhelfen könnte...
emeriks
emeriks 03.11.2020 aktualisiert um 08:24:10 Uhr
Goto Top
Zitat von @violak:
sorry aber ich finde da nichts was mir da weiterhelfen könnte...
???

Da stehen die Overloads des Constructors doch klar beschrieben. Jene mit 5 Argumenten habe ich Dir hier mal markiert.

2020-11-03 08_22_37-window
146189
Lösung 146189 03.11.2020, aktualisiert am 04.11.2020 um 09:19:49 Uhr
Goto Top
Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Die Fehlermeldung ist ja eindeutig ... .NET kann durch deinen Konstruktor nicht wissen welchen du benutzen willst weil du keine expliziten Typen bei den Parametern verwendest. Damit .NET den richtigen Kontruktor auswählen kann musst du hier zumindest bei so vielen Parameter den Typ explizit festlegen damit dieser eindeutig ist. Außerdem ist die ActiveDirectoryRights Enumeration "Full" fehlerhaft, du wählst hier aus einer Kombination dieser möglichen Werte:
https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.act ...
Nur am Rande: die SID musst du nicht doppelt aus dem Value erstellen diese ist im AD Object schon im richtigen Type in der Property SID vorhanden, lässt sich also vereinfachen.
$dn  = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'  
$sid = (Get-ADGroup "LDAP-FirmaA").SID  
$acl = Get-Acl -Path "AD:$dn"  
$acl.SetAccessRuleProtection($true, $true) 
$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule ([System.Security.Principal.SecurityIdentifier]$sid,[System.DirectoryServices.ActiveDirectoryRights]::GenericAll,[System.Security.AccessControl.AccessControlType]::Allow,[System.DirectoryServices.ActiveDirectorySecurityInheritance]::All)))
Set-Acl -Path "AD:$dn" -AclObject $acl  
violak
violak 04.11.2020 um 09:00:29 Uhr
Goto Top
Guten Morgen,

ja aber wenn ich dein Skript ausführe bekomme ich nach wie vor den gleichen Fehler.

Muss das hier [System.DirectoryServices.ActiveDirectorySecurityInheritance]:: denn vor jeden Parameter?

Ich verstehe den Aufbau einfach nicht und auch nicht warum das so kompliziert ist.
146189
Lösung 146189 04.11.2020 aktualisiert um 09:18:36 Uhr
Goto Top
Zitat von @violak:
ja aber wenn ich dein Skript ausführe bekomme ich nach wie vor den gleichen Fehler.
Nö, hier einwandfrei getestet. Habs für dich oben aber zusätzlich noch expliziter und alle Parameter mit Typ deklariert.
Verwendet wird der folgende Konstruktor
https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.act ...
Muss das hier [System.DirectoryServices.ActiveDirectorySecurityInheritance]:: denn vor jeden Parameter?
Nicht vor jeden der gewünschte Konstruktor muss für den Interpreter aber eindeutig genug sein!
Ich verstehe den Aufbau einfach nicht und auch nicht warum das so kompliziert ist.
Wenn könnte ja jeder programmieren, und es gibt zig unterschiedliche Anwendungsfälle die alle berücksichtigt werden müssen, deswegen gibt es diverse Konstruktoren. Ist hier eben kein Kindergarten sondern ein Admin-Forum face-wink. Lerne objektorientiertes Programmieren dann verstehst du auch was ein Konstruktor ist face-wink.

Bis denn dann,
G. w.
violak
violak 04.11.2020 um 09:22:44 Uhr
Goto Top
achso ist das gemeint, ok jetzt verstehe ich das.

Da muss ich mich wohl noch etwas reinarbeiten, sorry für die Umstände aber ich habe das echt nicht verstanden warum das so sein muss und wie das dann nachher ausschauen soll.

Vielen Dank für deine Hilfe face-smile
emeriks
emeriks 04.11.2020 aktualisiert um 10:09:11 Uhr
Goto Top
Zitat von @146189:
Ich verstehe den Aufbau einfach nicht und auch nicht warum das so kompliziert ist.
Wenn könnte ja jeder programmieren. Ist eben kein Kindergarten sondern ein Admin-Forum face-wink. Lerne objektorientiertes Programmieren dann verstehst du es auch .
Das kommt aber auch daher, wenn man einen Anfänger einfach nur mit komplexen Einzeilern zu füttern versucht. Ich nehme Deine Zeilen mal auseinander, vielleicht versteht sie es dann.

[string]$dn  = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'  
$sid = (Get-ADGroup "LDAP-FirmaA").SID  
$acl = Get-Acl -Path "AD:$dn"  
$acl.SetAccessRuleProtection($true, $true) 

$adRights = [System.DirectoryServices.ActiveDirectoryRights]::GenericAll
$accessType = [System.Security.AccessControl.AccessControlType]::Allow
$inheritanceType
 = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All

$NewRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $sid, $adRights, $accessType , $inheritanceType

$acl.AddAccessRule($NewRule)
Set-Acl -Path "AD:$dn" -AclObject $acl  
146189
146189 04.11.2020 aktualisiert um 09:49:55 Uhr
Goto Top
Das kommt aber auch daher, wenn man einen Anfänger einfach nur mit komplexen Einzeilern zu füttern versucht.
Den Einzeiler hat sie selbst gepostet, hab ihn nur übernommen face-wink.
violak
violak 04.11.2020 um 10:10:58 Uhr
Goto Top
Nur nochmal eine kurze Verständnisfrage.

Wenn ich im AD jetzt in eine OU gehe in der ich das Script angewendet habe und schaue da in den Reinter Sicherheit rein um zu sehen ob die Gruppe aus gesetzt wurde, dann kommt die Meldung "Die Berechtigungen von .... sind nicht richtig zugeordnet, so dass einige Einträge ohne Wirkung sein könnten....."

Ist das schlimm? Was passiert denn da? Muss ich das ggf. irgendwie für alle OUs wo ich die Gruppe gesetzt haben jetzt "neu ordnen"?
146189
146189 04.11.2020 aktualisiert um 11:04:35 Uhr
Goto Top
"Die Berechtigungen von .... sind nicht richtig zugeordnet, so dass einige Einträge ohne Wirkung sein könnten....."
Wenn du die Vererbung unterbrichst wundert mich das nicht wirklich face-wink.

Vielleicht solltest du dich da nochmal ganz genau informieren bevor du einfach so ohne weiteres an den ACLs mit GenericAll pfuschst ohne zu wissen was das für Auswirkungen das für die User hat und vor allem auch mal mit AdminSDHolder beschäftigen wenn du dich wunderst warum manche Berechtigungen nach einer Stunde wieder glatt gebügelt werden.
emeriks
emeriks 05.11.2020 aktualisiert um 08:51:40 Uhr
Goto Top
Zitat von @146189:
"Die Berechtigungen von .... sind nicht richtig zugeordnet, so dass einige Einträge ohne Wirkung sein könnten....."
Wenn du die Vererbung unterbrichst wundert mich das nicht wirklich face-wink.
Vielleicht solltest du dich da nochmal ganz genau informieren bevor du einfach so ohne weiteres an den ACLs mit GenericAll pfuschst ohne zu wissen was das für Auswirkungen das für die User hat und vor allem auch mal mit AdminSDHolder beschäftigen wenn du dich wunderst warum manche Berechtigungen nach einer Stunde wieder glatt gebügelt werden.
Nein, daran wird das nicht liegen.
Ich schätze, das ist die Meldung, die kommt, wenn in der ACL eine Verweigerung nicht am Anfang der ACL steht. Genau dann kann es passieren, "... dass einige Einträge ohne Wirkung sein könnten ...", nämlich diese Verweigerungen.
Aber Das passiert normalerweise erst gar nicht, wenn man die ACL mit den "offiziellen" Tools bearbeitet: MMC, PowerShell, .Net, usw.
Solche Meldungen hatte ich auch schon mal. Dann habe ich mit der MMC die betreffende ACL einmal testweise geändert (etwas hinzugefügt und wieder entfernt) und neu gespeichert. Dann war das wieder gut.
Wie das bei mir dazu kam, habe ich auch nie herausgefunden (nicht geforscht).
Das kann übrigens auch bei den NTFS-ACL's so passieren.