Berechtigungsverwaltung mittels PowerShell Modul NTFSSecurity

Vor einigen Tagen kam ein Kunde mit einer etwas komplexeren Anfrage auf mich zu. Innerhalb einer gewachsenen Ordnerstruktur auf einem Windows-Fileserver sollten NTFS Berechtigungen für ca. 400 Unterordner angepasst werden, eine klassische Vererbung war leider aufgrund der Struktur nicht möglich. Die betroffenen Ordner selbst waren jedoch immer exakt gleich benannt. Als Lösungsansatz für die Aufgabe zog ich sofort Powershell in Betracht, jedoch war die Sache nicht so leicht wie ich zuerst dachte.

Ich testete „Get-Childitem“ und „Get-Acl“ leider war jedoch die Ordnerstruktur tiefer als 260 Zeichen. Get-Childitem scheiterte mit dem Fehler „PathTooLongException“. Nach einer Recherche, war an mehreren Stellen im Netz, als Workaround Robocopy empfohlen worden, dies stellt sich jedoch nur als zweitbeste Alternative heraus.

Im Microsoft Script Center wurde ich fündig, hier hat der Microsoft Mitarbeiter Raimund Andrée ein Powershell Modul für die Verwaltung von NTFS Berechtigungen veröffentlicht, welches das genannte Problem geschickt umgeht. Das Modul File System Security PowerShell Module 4.2.2 nutzt AlphaFS für den Datei-Systemzugriff und umgeht so die Zeichenbeschränkung.

Anbei eine kurze Anleitung wie ihr das Modul einsetzen könnt.

  1. Download der aktuellsten Version aus dem Microsoft Script Center
  2. Optional: Aktualisierung des Windows Management Frameworks und Aktivierung des .Net Frameworks 3.5.1
    (Der Kunde hatte noch einen Windows Server 2008 R2 Fileserver, hier musste das WMF aktualisiert werden bevor das Modul korrekt funktionierte.)
  3. Zip Datei nach "C:\Program Files\WindowsPowerShell\Modules" entpacken
  4. Module auflisten

    Get-Module -ListAvailable *ntfs*

    NTFSSecurity_Module_Import1

  5. Modul importieren

    Import-Module NTFSSecurity

    NTFSSecurity_Module_Import2

  6. Befehle auflisten

    Get-Command -Module NTFSSecurity

    NTFSSecurity_Module_Import3

  7. Ordner-Berechtigungen auslesen, vererbte Berechtigungen überspringen, Ausgabe in CSV

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Get-NTFSAccess -ExcludeInherited

    | export-csv C:\Scripts\30-04-16_contosodata_nicht_vererbte_Berechtigungen.csv -Encoding Unicode

  8. Berechtigungen spezifischer Ordner mittels „Where-Object“ Filter auslesen, Ausgabe in CSV

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Where-Object {$_.name -EQ „03_Gehalt“ -or $_.name -EQ „05_Management“} `

    | Get-NTFSAccess `

    | export-csv C:\Scripts\30-04-16_Berechtigungen_Gehalt_und_Management.csv -Encoding Unicode

  9. Vererbung spezifischer Ordner mittels „Where-Object“ Filter deaktivieren

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Where-Object {$_.name -EQ „03_Gehalt“ -or $_.name -EQ „05_Management“} `

    | Disable-NTFSAccessInheritance

  10. Domänen-Benutzer Berechtigungen auf Unterordner entfernen

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Where-Object {$_.name -EQ „03_Gehalt“ -or $_.name -EQ „05_Management“} `

    | Remove-NTFSAccess -Account „CONTOSO\Domain Users“ -AccessRights Modify -PassThru

  11. Berechtigungen hinzufügen

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Where-Object {$_.name -EQ „03_Gehalt“ -or $_.name -EQ „05_Management“} `

    | Add-NTFSAccess -Account „CONTOSO\Management-Group“ -AccessRights Modify -PassThru

  12. Abschließend zur Kontrolle nochmals die Berechtigungen auslesen

    Get-ChildItem2 -Directory -Force -Path d:\contosodata -Recurse -SkipSymbolicLinks `

    | Get-NTFSAccess -ExcludeInherited `

    | export-csv C:\Scripts\30-04-16_contosodata_nicht_vererbte_Berechtigungen1.csv -Encoding Unicode

Damit war der Task erledigt und der Kunde zufrieden, sicherlich wäre auch ein umfangreicheres PowerShell Skript möglich gewesen, welches die einzelnen Schritte zusammenfasst, aber für die Anforderung des Kunden war die Vorgehensweise ausreichend und effizient.

PS: Im Zuge der Recherche bin ich auch auf die relativ neue Fileserver Funktion „Dynamic Access Control“ gestoßen, im konkreten Fall war dies leider keine Lösung da der Kunde noch einen Windows Server 2008 R2 hatte. Herr Sommergut hat die Funktion in seinem Blog WindowsPro erläutert.

Philipp Kohn

IT Pro im Microsoft-Umfeld

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *