Tags: PowerShell, Kommandozeile, Dateisystem, Rechteverwaltung
Beim Management der Zugriffsrechte für Dateien und Verzeichnisse spielt der Besitzer eine wesentliche Rolle, weil er anderen Benutzern Privilegien zuweisen oder entziehen kann. Möchte man den Besitz mehrerer Dateien übernehmen, dann ist der Einsatz von Tools für die Kommandozeile 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.
Eine Besonderheit stellt die Gruppe der Administratoren 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 Administratoren.
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. Administratoren 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.
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 Eingabeaufforderung 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 Unterverzeichnisse 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".
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- icacls, Get-ACL: Dateirechte anzeigen auf der Kommandozeile und in PowerShell
- Ordner freigeben mit PowerShell
- NTFS-Rechte anzeigen, zuweisen und entfernen mit dem PowerShell-Modul NTFSSecurity
- Zugriffsrechte auf Freigaben anzeigen, ändern und entziehen mit PowerShell
- Netzlaufwerk mit PowerShell verbinden
Weitere Links
1 Kommentar
Vielen Dank!
Konnte dadurch ein Missgeschick: Verweigerung aller Rechte bei Authentifizierte Nutzer wieder gerade biegen.