Powershell Dateisystemberechtigungen setzen

Die Dateisystemberechtigungen von Windows sind leider alles andere als einfach. In NTFS werden so ziemlich alle Dateisystemberechtigungen über ACL’s (Access Control List) gesetzt. Auch die grafische Oberfläche zwingt einen zu vielen unnötigen Klicks.

Über die Grafische Oberfläche lassen sich Dateisystemberechtigungen nur schwer setzen, mit Powershell geht das einfacher

Will man gleich mehrfach Berechtigungen setzen, dann lässt sich das sich mit Powershell einfacher lösen.

Beim setzen von Dateisystemberechtigungen muss man eine FileSystemAccessRule setzen und dafür werden folgende Angaben benötigt:

  • Benutzername (Domain\Benutzer)
  • Dateisystemberechtigung wie: Read, ReadAndExecute,… (eine vollständige Liste gibt es im Microsoft Developer Network)
  • InheritanceFlag – Auf welche Objekte vererbt werden soll (Ordner, Unterordner oder Dateien) siehe Tabelle
  • PropagationFlag – Wie tief vererbt werden soll
  • sowie ein Zugriffstyp (AccessControlType), gibt an ob die ACL für die zutreffenden Objekte etwas Erlaubt oder Verweigert (Allow/Deny)

Das Zusammenspiel von InheritanceFlag und PropagationFlag soll folgende Tabelle erläutern die in den Klammer stehenden Zahlenwerte sind Abkürzungen, auf die im nächsten Abschnitt eingegangen wird:

 PropagationFlagsInheritanceFlags
Nur Ordnernone (0)none (0)
Ordner und Dateiennone (0)ObjectInherit (2)
Ordner und Unterordner none (0)ContainerInherit (1)
Ordner, Unterordner und Dateiennone (0)ContainerInherit|ObjectInherit (3)
DateienInheritOnly (2)ObjectInherit (2)
UnterordnerInheritOnly (2)ContainerInherit (1)
Unterordner und DateienInheritOnly (2)ContainerInherit|ObjectInherit (3)

Das setzen von Dateisystemberechtigung, InheritanceFlag, PropagationFlag, AccessControlType ist in Powershell viel Schreibarbeit, da die Objekte genau angegeben werden müssen z.B.:

$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None

Aber es geht auch einfacher, da einige Attribute wie das PropagationFlag eine Enumeration ist und auch durch einen Zahlenwert repräsentiert werden kann so ist PropagationFlag.None = 0 (siehe Tabelle). Die Werte von Benutzername, Dateisystemberechtigung sowie der Zugriffstyp kann als einfache Zeichenkette angegeben werden.

Beispiel Dateisystemberechtigungen  Lesen und Ausführen mit Powershell setzen

Um einem Benutzen Lesen und Ausführen Rechte für einen Ordner, dessen Unterordner und Dateien zu geben, muss folgende stark vereinfachte Powershell ausgeführt werden:

$Right="ReadAndExecute"
$path="d:\freigabe"
$Principal="domain\user"
$rule=New-Object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,3, 0,"Allow")
$acl = get-acl $path
$acl.SetAccessRule($rule)
set-acl $path $acl

Bleibt nur noch zu beachten, dass eine Datei oder ein Ordner mehrere ACL’s besitzen kann. So ist es unter anderem möglich einem Benutzer für die selbe Datei und Dateisystemberechtigungen jeweils den Zugriffstyp für allow und deny zu geben. Außerdem spielt hier die Vererbung der übergeordneten Objekte eine Rolle.

Ein Gedanke zu „Powershell Dateisystemberechtigungen setzen“

Kommentare sind geschlossen.