Besitzer von Dateien und NTFS-Vererbung ändern mit PowerShell


    Tags: , ,

    Besitzer einer Datei ändernDer Besitz von NTFS-Objekten und die Ver­erbung sind wesent­liche Mecha­nismen für die Vergabe von Zugriffs­rechten. Die Bord­mittel von PowerShell sind für das Manage­ment dieser Features aber um­ständlich oder unzu­reichend. Das Modul NTFSSecurity verein­facht diese Auf­gabe mit mehreren Cmdlets.

    NTFSSecurity wurde vom Microsoft-Mitarbeiter Raimund Andrée als eigenständiges Modul entwickelt. Es muss erst installiert und importiert werden, bevor seine Cmdlets einsatzbereit sind. Die dafür bevorzugte Methode nutzt das Package Management von PowerShell. Wie man dabei vorgeht, habe ich in diesem Beitrag beschrieben.

    Besitzer von Dateien ändern

    Damit ein User den Besitz an einer Datei oder einem Verzeichnis über­nehmen kann, muss ihm erst das dafür nötige Recht eingeräumt werden. Ausge­nommen davon sind Administratoren, die anderen Benutzern immer den Besitz an einer Datei zuordnen dürfen, auch wenn sie das betreffende Objekt gar nicht selbst angelegt haben.

    Während man dafür in der bloßen PowerShell icacls.exe oder .NET-Klassen bemühen muss, lässt sich dieses Recht mit NTFSSecurity einfach über das Cmdlet Add-NTFSAccess erteilen:

    Add-NTFSAccess -AccessRights TakeOwnership -Account contoso\myUsers -Path .\temp

    Dieser Aufruf würde der Gruppe myusers das Recht gewähren, den Besitz über das Verzeichnis temp zu übernehmen.

    User flee Recht auf Besitz eines Verzeichnisses gewähren mit Add-NTFSAccess

    Anschließend könnten die betreffenden Benutzer diese Möglichkeit in Anspruch nehmen. Auch hier reicht mit NTFSSecurity ein Kommando, während man in PowerShell alleine den Umweg über Get-Acl nehmen muss:

    Set-NTFSOwner -Path .\temp -Account contoso\flee

    Das Cmdlet Set-NTFSOwner erwartet neben dem Pfad immer die Angabe eines Benutzers oder einer Gruppe, auch wenn der Besitz an den aktuell angemel­deten Benutzer übertragen werden soll.

    Um festzu­stellen, wer Besitzer einer Datei oder eines Verzeichnisses ist, verwendet man den Gegenspieler von Set-NTFSOwner:

    Get-NTFSOwner -Path .\temp

    Beide Cmdlets leiden unter dem Nachteil, dass der Parameter Path zwar mehrere Dateinamen, aber keine Wildcards akzeptiert. Außerdem können sie sich nicht rekursiv durch Verzeichnis­bäume arbeiten. Daher übergibt man ihnen für diesen Zweck den Output von Get-ChildItem. Dieses weist aber ein Limit für Pfadlängen von 260 Zeichen auf, weshalb NTFSSecurity das Cmdlet Get-ChildItem2 ohne diese Einschränkung enthält:

    Get-ChildItem2 -Directory -Recurse | Get-NTFSOwner

    Dieser Befehl würde die Besitzer für alle Unter­verzeichnisse des aktuellen Ordners ausgeben.

    Besitzer aller Unterverzeichnisse anzeigen mit Get-NTFSOwner

    Analog dazu würde

    Get-ChildItem2 -Directory | Set-NTFSOwner - Account contoso\flee

    den Besitz dieser Verzeichnisse an den User flee übertragen.

    Vererbung aktivieren und deaktivieren

    Das Modul NTFSSecurity bringt auch deutliche Verbesserungen beim Management der Vererbung von Zugriffs­rechten. Zuständig sind dafür die Cmdlets

    • Get-NTFSInheritance
    • Disable-NTFSAccessInheritance
    • Enable-NTFSAccessInheritance

    Das erste davon zeigt erwartungs­gemäß an, ob für bestimmte Ordner oder Dateien die Vererbung aktiviert bzw. unterbunden wurde:

    Get-NTFSInheritance -Path .\Sysmon.zip

    Status der Vererbung für Unterverzeichnisse anzeigen mit Get-NTFSInheritance

    Dieser Befehl gibt Auskunft darüber, ob die Datei Sysmon.zip die Berechtigungen vom übergeordneten Verzeichnis erbt. Möchte man dies verhindern, dann erledigt das Kommando

    Disable-NTFSAccessInheritance -Path .\Sysmon.zip

    diese Aufgabe. Bei dieser Gelegenheit werden die zuvor ererbten Rechte in explizit zugewiesene Berech­tigungen umgewandelt. Beim umgekehrten Vorgang nach dem Muster

    Enable-NTFSAccessInheritance -Path . \Sysmon.zip

    bleiben diese expliziten Rechte erhalten und werden dann noch durch die ererbten verdoppelt. Wenn man das vermeiden möchte, dann ruft man das Cmdlet mit dem Schalter Remove­Explicit­AccessRules auf:

    Enable-NTFSAccessInheritance -Path .\Sysmon.zip -RemoveExplicitAccessRules

    Diesen Befehl kann man auch auf Objekte anwenden, bei denen die Vererbung bereits aktiviert ist, nur um die expliziten Rechte schnell und einfach zu entfernen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links