Icacls, Takeown, PowerShell: Besitzer von Dateien unter NTFS ändern

    Besitzer einer Datei ändernBeim Management der Zugriffs­rechte für Dateien und Verzeich­nisse spielt der Besitzer eine wesent­liche Rolle, weil er anderen Benutzern Privilegien zuweisen oder entziehen kann. Möchte man den Besitz mehrerer Dateien über­nehmen, dann ist der Einsatz von Tools für die Kommando­zeile am effizientesten.

    Jede Datei bzw. jedes Verzeichnis hat einen Besitzer, und zwar standardmäßig jenen Benutzer, der das betreffende Objekt erzeugt hat. Dafür wird beim Anlegen einer Datei die SID des aktuellen Benutzers in das Feld Owner des Security-Descriptors übernommen.

    Besitzer hat unwiderrufliche Rechte

    In seiner Funktion als Besitzer kann ein User entscheiden, wer welche Zugriffsrechte erhält. Das Privileg, anderen Benutzern Rechte auf bestimmte Dateien zu erteilen oder zu entziehen, lässt sich zwar an jeden User verleihen. Der Besitzer hat es aber automatisch und es kann ihm nicht genommen werden.

    Die Berechtigung, die Zugriffsrechte einer Datei zu ändern, kann man jedem User zuweisen. Besitzer haben es automatisch.

    Eine Besonderheit stellt die Gruppe der Admini­stra­toren dar: Erstellt eines ihrer Mitglieder eine Datei oder wird ihm die Rolle des Besitzers übertragen, dann gilt diese immer für die gesamte Gruppe. Zeigt man die Dateirechte mit PowerShell oder icacls an, dann weist das Owner-Feld in diesem Fall keine individuellen Nutzer aus, sondern immer die lokale oder AD-Gruppe für Admini­stra­toren.

    Aus diesem Grund können sämtliche Admins die Zugriffsrechte auf solche Verzeichnisse und Dateien ändern, die einer von ihnen erzeugt hat. Entsprechend ist es auch nicht möglich, dass ein Mitglied der Gruppe Administratoren einem anderen dauerhaft bestimmte Rechte auf eine solche Datei entzieht. Nachdem jeder von ihnen dort das unantastbare Privileg besitzt, die Zugriffsrechte zu ändern, kann er sich diese nach Belieben wieder zurückholen.

    Recht für Inbesitznahme erteilen

    Damit ein anderer Benutzer als jener, der eine Datei oder ein Verzeichnis erstellt hat, diese in Besitz nehmen kann, muss ihm das entsprechende Recht erteilt werden. Anschließend kann er sich mit Hilfe der zuständigen Tools selbst als ihr Besitzer eintragen. Admini­stra­toren können dagegen immer den Besitzer von allen Objekten ändern, auch wenn sie diese nicht erzeugt haben und sie ihnen nicht gehören.

    Für einzelne Objekte kann man das Kontextmenü im Windows Explorer öffnen und unter dem Reiter Sicherheit den Punkt Erweitert auswählen. Im folgenden Dialog hebt man den Eintrag hervor, dem man das Recht zur Übernahme des Besitzes erteilen möchte oder man legt einen neuen an.

    User können den Besitz einer Datei übernehmen, wenn ihnen dafür das nötige Recht erteilt wurde.

    Anschließend betätigt man (soweit vorhanden) die Schaltfläche Bearbeiten und geht dort auf den Link Erweiterte Berechtigungen anzeigen. Dadurch wird die Option Besitz übernehmen sichtbar. Sie versetzt den betreffenden User in die Lage, sich zum Besitzer der Datei oder des Verzeichnisses zu machen.

    Möchte man einem Benutzer das Recht einräumen, den Besitz für eine größere Zahl an Dateien zu übernehmen, dann kann man dies einfacher über icacls auf der Kommandozeile tun. Folgendes Beispiel erlaubt dies dem User Bseidl für alle *.xml-Dateien im aktuellen Verzeichnis und allen seinen Unterverzeichnissen (aufgrund des Schalters /T):

    icacls *.xml /grant "contoso\Bseidl:(WO)" /T

    Das zu erteilende Recht steht in Klammern nach dem Benutzernamen und einem Doppelpunkt, wobei "WO" Write Owner bedeutet.

    Besitz an Dateien übernehmen

    Wurde an einen User diese Berechtigung vergeben oder handelt es sich um einen Administrator, dann kann er nun den Besitzer der betreffenden Dateien ändern. Auf der Kommandozeile eignet sich dafür ebenfalls icacls sowie takeown.exe. Beide müssen zu diesem Zweck in einer Eingabeauf­forderung mit administrativen Rechten aufgerufen werden.

    Das einfachere Kommando ist takeown, das erwartungsgemäß weniger Optionen bietet. So kann man damit nur den aktuellen User oder mit dem Schalter /A den Administrator als Besitzer eintragen:

    takeown /F docs\*.txt /r

    Dieser Befehl würde den Besitzer für alle Dateien mit der Endung *.txt in docs und allen Unterverzeichnissen (Schalter /r) auf den aktuell angemeldeten Benutzer ändern. Bei Bedarf kann man über den Parameter /s den Namen eines entfernten Rechners angeben.

    Hingegen bietet icacls die Möglichkeit, einen beliebigen neuen Besitzer für Dateien und Verzeichnisse einzutragen. Um diesen Vorgang auf alle Unterver­zeichnisse auszudehnen, gibt man wie bereits weiter oben beschrieben nicht die bei anderen Befehlen üblichen /s oder /r an, sondern /t:

    icacls docs\*.txt /setowner "contoso\ Bseidl " /t

    Dieser Aufruf würde alle Dateien mit der Endung *.txt rekursiv dem User BSeidl zuordnen.

    Besitzer von Datei mit PowerShell ändern

    PowerShell enthält mit Get-ACL und Set-ACL zwei Cmdlets, die auf den ersten Blick für diese Aufgabe wie geschaffen erscheinen. In der Praxis gestaltet sich ihre Verwendung jedoch recht umständlich, wenn man damit den Besitzer von Dateien ändern möchte.

    Im ersten Schritt muss man erst ein Objekt vom Typ Security Principal erzeugen, das den künftigen Besitzer repräsentiert. Anschließend liest man mit Get-ACL den Security-Descriptor der Datei ein und ruft dessen Methode SetOwner auf. Zum Schluss schreibt Set-ACL diese Änderungen:

    $User = New-Object System.Security.Principal.NTAccount("contoso", "meyer")
    $File = Get-Acl Test.txt
    $File.SetOwner($User)
    Set-Acl -aclobject $File -path Test.txt

    Um diese Aktion rekursiv auf alle Unterverzeichnisse anzuwenden, müsste man den Parameter -Path weglassen und stattdessen mit Get-ChildItem eine Liste von Dateien über eine Pipe an Set-ACL übergeben. Dabei muss man darauf achten, dass der Pfad in Get-ChildItem in UNC-Notation geschrieben wird, andernfalls erhält man die Fehlermeldung "Die Sicherheits-ID darf nicht der Besitzer dieses Objekts sein".

    1 Kommentar

    Bild von Gregor
    Gregor sagt:
    21. November 2016 - 21:19

    Vielen Dank!
    Konnte dadurch ein Missgeschick: Verweigerung aller Rechte bei Authentifizierte Nutzer wieder gerade biegen.