restock
Goto Top

NTFS Ordnerberechtigungen - Vererbung der Berechtigungen aktivieren und deaktivieren

Hallo Zusammen,

ich stehe mal wieder vor einem Problem mit der Powershell.

Ich muss bei sehr vielen Ordner die Vererbung aktivieren um eine neue Berechtigung durch die komplette Struktur durcherben zu können. Anschließend muss ich das Skript wieder "rückwärts" laufen lassen um die Vererbung wieder zu deaktivieren. Hier geht es allerdings erst einmal nur um den ersten Teil.

Folgenden Quellcode habe ich mir bis jetzt zusammengestellt/gesucht:

$Paths = get-content "C:\Ordnerliste.txt"  
foreach($path in $Paths){
    $acl = get-acl $path
    $isProtected = $false
    $preserveInheritance = $false
    $acl.SetAccessRuleProtection($isProtected, $preserveInheritance)
    Set-Acl $path -AclObject $acl
}

Das Skript läuft auch ohne eine Fehlermeldung in der Powershell durch, nur verändert sich in meiner Ordnerstruktur an der gewünschten Stelle einfach gar nichts. Ich habe auch schon wiederholt mit den true und flase werten herumprobiert, allerdings brachte dies auch keine Besserung.

Ich arbeite mit dem Skript momentan noch in einer Teststruktur, also her mit den Ideen, noch kann nichts kaputtgehen face-smile

Danke Euch!

Content-ID: 247549

Url: https://administrator.de/contentid/247549

Ausgedruckt am: 25.11.2024 um 02:11 Uhr

emeriks
emeriks 27.08.2014 um 12:56:53 Uhr
Goto Top
Hi,
lass mich raten: Du musst irgendwo ran, z.B. Berechtigungen anpassen, wo Du z.Z. auch als Admin nicht ran kommst?

E.
colinardo
colinardo 27.08.2014 aktualisiert um 13:11:49 Uhr
Goto Top
Moin,
machst du am besten mit takeown und icacls:
Ordnerfreigaben einzelner Ordner komplett zurücksetzten
wenn du in einigen Ordnern keine Zugriffsrechte hast. Mit Powershell wirst du da sonst auf einige Hindernisse treffen, ich spreche aus Erfahrung face-wink

Grüße Uwe
Restock
Restock 27.08.2014 um 13:15:02 Uhr
Goto Top
Admin Rechte habe ich auf alle Ordner, ich könnte auch jeden Ordner einzeln anklicken und die Berechtigungen ändern, bzw. den Hacken setzen. Allerdings ist mir das bei knapp 800 Ordnern zu viel Aufwand.

Hintergrunde ist folgender. Wir haben eine Ordnerstruktur wo bestimmte Dokumente abgelegt werden. In dieser Struktur, darf allerdings nur in der untersten Ebene von den Usern etwas geändert werden (zb. Ordner erstellen). Aus diesem Grund haben wir die Berechtigungen hier aufgebrochen. Dumm nur wenn man jetzt dort an allen etwas Ändern muss..
emeriks
Lösung emeriks 27.08.2014, aktualisiert am 29.08.2014 um 12:16:46 Uhr
Goto Top
Erkläre doch mal bitte etwas genauer:
Wenn Du überall Adminrechte hast, warum musst Du dann erst überall die Vererbung ändern um sie dann später in einem Folgeschritt wieder rauszunehmen? Was willst Du denn zwischenzeitlich machen?

E.
Restock
Restock 27.08.2014 um 14:15:13 Uhr
Goto Top
Im groben sieht meine Ordnerstruktur momentan so aus:
Standort
	Abteilung 1
		Daten 1
			Eigener Ordner A
			Eigener Ordner B
		Daten 2
			Eigener Ordner A
			Eigener Ordner B
	Abteilung 2
		Daten 1
			Eigener Ordner A
			Eigener Ordner B
		Daten 2
			Eigener Ordner A
			Eigener Ordner B

Das ganze 19 mal und mit noch mehr "Abteilungen","Daten" und "Eigener Ordner" Ordner.

Das Problem an der ganzen Sache ist, dass unsere User hier nur unter dem Ordner "Daten" eigene Ordner erstellen, löschen und bearbeiten dürfen. Also habe ich vor ca. 2 Jahren hier die Berechtigungen aufgebrochen und das Löschen und Ändern nur auf dieser Eben erlaubt. Darüber haben die User nur Lesezugriff sodass die Ordnerstruktur nicht versehentlich oder unberechtigt geändert werden kann.

Da seit dieser Zeit das System durch einige Hände gegangen ist die leider nicht genau aufgepasst haben, wurden auf einigen Ordnern falsche Berechtigungen gesetzt oder weggenommen, sodass nun nicht mehr wirklich viel korrekt ist. Manche User können zu viel.. manche zu wenig usw.

Ich möchte nun die Vererbung wieder einschalten, alle Rechte entfernen und anschließend wieder richtig durcherben. Danach breche ich die Berechtigungen wieder auf und Erbe bis zu dem Ornder "Daten" das Leserecht, sodass auf der untersten Ebene die Schreibberechtigungen erhalten bleiben.

Mag sein das mein Denkansatz auch komplett falsch ist... Falls ja, ich bin für jede Idee offen.
colinardo
Lösung colinardo 27.08.2014, aktualisiert am 29.08.2014 um 12:16:41 Uhr
Goto Top
wie du einen Reset der Permissions mit icalcs machst kannst du ja unter oben geposteten Link nachlesen.
So läuft das selbe hier mit Powershell:
$ordner = "\\Server\Share\Ordner"  
foreach($path in (dir $ordner -Recurse |?{$_.PSIsContainer})){
    $acl = get-acl $path.FullName
    $acl.SetAccessRuleProtection($false, $false)
    $acl.Access | ?{$_.IsInherited -eq $false} | %{$acl.RemoveAccessRule($_)|out-null}
    Set-Acl $path.Fullname -AclObject $acl
}
Bedenke aber das Powershell ab einer Pfadtiefe mit mehr als 260 Zeichen Probleme bekommt. Deshalb empfehle ich bei solchen Änderungen immer icacls.
emeriks
Lösung emeriks 27.08.2014, aktualisiert am 29.08.2014 um 12:16:19 Uhr
Goto Top
Ah ja. Du willst also die Berechtigungen nochmal "nach unten durchdrücken", wie mit der GUI "Alle Berechtigungen für untergeordnete Objekte durch vererbbare Berechtigungen von diesem Ordner ersetzen" ?

Mal abgesehen davon, dass das mit Deinem Ansatz so wohl nicht ganz funktionieren wird, wäre es vielleicht sinnvoller, ein Script zu schreiben, welches generell in dieser Struktur die Berechtigungen setzt, wie sie sein sollen. Ich nehme doch an, dass die Struktur standardisiert ist, mit wiederkehrenden Unterordnernamen usw.
Da sollte es doch kein Problem sein, dass über Schleifen in einem Script abzubilden.

Der Ansatz mit dem einfachen "Vererbung an/ausschalten" bringt nichts, weil die expliziten (nicht geerbten), falschen ACE's dadurch nicht verändert werden.

E.
emeriks
emeriks 27.08.2014 um 14:34:33 Uhr
Goto Top
Hi Colinardo,
inwiefern berücksichtigt das Script, dass durchaus gewünschte, ursprünglich gesetzte explizite ACE's dabei erkannt werden?

E.
colinardo
colinardo 27.08.2014 aktualisiert um 14:37:23 Uhr
Goto Top
Zitat von @emeriks:

Hi Colinardo,
inwiefern berücksichtigt das Script, dass durchaus gewünschte, ursprünglich gesetzte explizite ACE's dabei
erkannt werden?
meiner Meinung wollte er das doch nicht, er wollte doch erst mal alle gesetzten Rechte durch vererbte ersetzen. oder ??
Restock
Restock 27.08.2014 um 14:58:13 Uhr
Goto Top
Richtig ich möchte die beiden in der GUI zu sehenden Hacken setzen.

Wenn ich Dich richtig verstehe, dann werden durch diese Aktion und das anschließende "von oben erben" die Berechtigungen die momentan in der GUI auf "<nicht geerbt>" stehen dadurch nicht entfernt/resettet.

Könnte ich das lösen indem ich vorher alle Berechtigungen (außer Admin und System) lösche? Das Skript dazu hätte ich noch hier rumfliegen...

Ja es ist eine komplett standardisierte Struktur die sich in jedem Standort wiederholt. Deswegen ist deine Idee vielleicht wirklich die bessere. Ich werde nochmal etwas recherchieren.
colinardo
Lösung colinardo 27.08.2014, aktualisiert am 29.08.2014 um 12:16:31 Uhr
Goto Top
obiges Script aktiviert die Vererbung und entfernt dabei alle expliziten Berechtigungen, so dass nur noch vererbte Rechte erhalten bleiben. Das ganze rekursiv auf alle Unterordner.

oder
icacls "d:\Ordner" /Reset /t /c /q
macht das selbe ...
emeriks
Lösung emeriks 27.08.2014, aktualisiert am 29.08.2014 um 12:16:32 Uhr
Goto Top
"vom übergeordneten Objekt erben" heißt doch bloß, dass die ACL um ACE's aus dem übergeordneten Ornder, welche für die Vererbung freigegeben sind, ergänzt wird. Vorhandene ACE werden dadurch nicht geändert. Wenn man dann das Erben der Rechte wieder abschaltet, dann werden nur die geerbten ACE's wieder aus der ACL entfernt und der Zustand ist wie vorher.

Wenn man an übergeordneten Ordner sagt, "durch vererbbare Berechtigungen.....ersetzen", dann heißt das, dass die ACL's der untergeordneten Objekte geleert und mit vererbaren ACE's aus dem übergeordneten Ordner gefüllt werden. Dann kann aber mächtig daneben gehen, wenn Du eine Struktur hast, wo Du an einigen Stellen bewusst die Vererbung "abgeschaltet" und nur explizite ACE's gesetzt hast, dann würdest Du hier durch das "Ersetzen von Oben" diese ACE löschen. Wenn Du dann die Vererbung wieder aufhebst, dann hast Du die Wahl, die vererbten zu entfernen oder diese als nicht-geerbte (ich nenne diese immer "explizite") drin zu lassen. So oder so. Es würde dann beim vormaligen Vorhandensein von gewünschten "Ausnahmen" diese nicht mehr enthalten. Und ich nehme an, das ist nicht, was Du willst.

E.
Restock
Restock 27.08.2014 um 15:34:54 Uhr
Goto Top
Okay alles klar - jetzt ist der Groschen gefallen. Habs verstanden! :D

Danke schonmal für Eure Hilfe. Ich denke nochmal über alles nach und schaue dann wie ich es am Ende angehe. Ich poste mein Ergbniss dann face-smile