shogoon
Goto Top

NTFS per PowerShell

Hallo zusammen,

ich habe folgende Anforderungen:

Es existiert die Vorlage eines Projekt-Ordners mit diversen Unterordnern unterschiedlicher Anzahl. Diese Struktur soll vollständig vor Veränderung durch eine Berechtigte AD-Gruppe geschützt werden. Unterhalb der Ordner sollen die User allerdings Dateien und Ordner erstellen, bearbeiten und löschen dürfen.

Ich habe dazu folgenden Ansatz, die Lösung ist aber noch nicht perfekt:

# Variablen definieren
$path = "D:\Vorlage" # Pfad zur obersten Ebene der Ordnerstruktur  
$group = "ad\project-test" # Name der Benutzergruppe  

# Berechtigungen für die oberste Ebene des Ordners festlegen
$acl = Get-Acl $path
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "ReadAndExecute,Synchronize", "ContainerInherit,ObjectInherit", "None", "Allow")  
$acl.SetAccessRule($accessRule)
Set-Acl -Path $path -AclObject $acl

# Berechtigungen für alle Unterordner festlegen
Get-ChildItem $path -Recurse -Directory | ForEach-Object {
    $acl = Get-Acl $_.FullName
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "ReadAndExecute,Synchronize", "ContainerInherit,ObjectInherit", "None", "Allow")  
    $acl.SetAccessRule($accessRule)
    Set-Acl -Path $_.FullName -AclObject $acl

    # Verhindern, dass Dateien und Ordner gelöscht oder umbenannt werden
    $denyDelete = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "DeleteSubdirectoriesAndFiles,Delete", "ContainerInherit,ObjectInherit", "None", "Deny")  
    $acl.AddAccessRule($denyDelete)
    Set-Acl -Path $_.FullName -AclObject $acl
}

# Berechtigungen für die unterste Ebene des Ordners festlegen
Get-ChildItem $path -Recurse -Directory | Where-Object { !(Get-ChildItem $_.FullName -Directory) } | ForEach-Object {
    $acl = Get-Acl $_.FullName
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")  
    $acl.SetAccessRule($accessRule)
     
    Set-Acl -Path $_.FullName -AclObject $acl
}

Bei dieser Lösung wird das Recht "Ändern" bereits auf den letzten Unterordner gesetzt, wodurch der User den Ordnernamen ändern kann.
Wenn ich mit dem Prinzipal "ERSTELLER" arbeite, können andere Projektmitglieder diese Dateien nicht verändern.

Hat noch jemand einen Vorschlag für mich?

Content-ID: 64251596736

Url: https://administrator.de/forum/ntfs-per-powershell-64251596736.html

Ausgedruckt am: 03.04.2025 um 16:04 Uhr

emeriks
emeriks 17.10.2023 aktualisiert um 10:43:07 Uhr
Goto Top
Hi,
Du musst nur zusätzlich für $group eine Verweigerung eintragen für "Nur dieser Ordner", "löschen".

E.
Shogoon
Shogoon 17.10.2023 um 20:42:16 Uhr
Goto Top
Zitat von @emeriks:

Hi,
Du musst nur zusätzlich für $group eine Verweigerung eintragen für "Nur dieser Ordner", "löschen".

E.

Dann müsste ich aber noch zusätzlich darunter die Vererbung deaktivieren. Wie mache ich das noch?
emeriks
emeriks 18.10.2023 um 09:14:41 Uhr
Goto Top
Dann müsste ich aber noch zusätzlich darunter die Vererbung deaktivieren. Wie mache ich das noch?
Nein, wieso?
Man kann vererbte Berechtigungen mit nicht vererbten kombinieren. Verweigerungen haben Vorrang vor Gewährungen, vollkommen unabhängig, welche davon vererbt wurden und welche nicht.

Ich empfehle Dir, dass Du diese Berechtigungen erst einmal mit dem Explorer manuell aufbaust. Dann testest Du, ob es so funktioniert, wie gewünscht. Dann liest Du die ACLs und deren ACEs mit PowerShell aus. Damit weißt Du dann, was Du da in einem Script setzen musst.


  • 1. Ebene
    • 2. Ebene
      • 3. Ebene

User soll diese 3 Ebenen nicht ändern dürfen, aber in und unterhalb der 3. Ebene arbeiten können?
(Oder ggf. bloß mit 2 Ebenen)

Falls ja:
An 3. Ebene
  • Recht zum Ändern erteilen für "Nur Unterordner und Dateien"
  • Recht zum Erstellen von Dateien und Ordnern erteilen
  • Recht zum Schreiben und Löschen für "nur diesen Ordner" verweigern

So machen wir das bei uns und das funktioniert auch so.