pict rider - stock.adobe.com
Wie Sie Windows-Berechtigungen mit PowerShell verwalten
Sie können NFTS-Berechtigungen unter Windows mit der PowerShell überprüfen und gegebenenfalls anpassen. Das geht oft schneller als in der GUI und Sie können Skripte nutzen.
Sie können die PowerShell nicht nur nutzen, um Windows-Berechtigungen für ReFS und NTFS zu verwalten, sondern auch Probleme auf Dateisystemen zu erkennen und korrupte Bereiche zu reparieren. Das vermeidet Datenverlust. Folgenden Befehl verwenden Sie, um zu prüfen, ob Laufwerk C korrekt funktioniert:
Get-VolumeCorruptionCount -Verbose C
Alle verfügbaren Rechte für Verzeichnisse und Dateien lassen Sie sich in der PowerShell folgendermaßen anzeigen:
[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])
Wie Sie Berechtigungen auslesen und auf andere Objekte kopieren
Dieses Cmdlet kommt zum Einsatz, wenn Sie die Berechtigungen für einen Pfad anzeigen wollen:
Get-ACL -Path “Z:\vm”
Um die Berechtigungen anzuzeigen, muss nur der entsprechende Pfad angegeben werden. Die Anzeige kann natürlich noch detaillierter gestaltet werden, indem die Ausgabe an das Cmdlet Format-List übergeben wird.
Get-ACL -Path “Z:\vm” |fl
Wenn ein Ordner mit erweiterten Berechtigungen konfiguriert ist, zeigt PowerShell das ebenfalls mit dem obigen Cmdlet an. Mit diesem kurzen Befehl können also auch komplexe Berechtigungsdaten ausgelesen und bei Bedarf in Variablen gespeichert werden. Auch das wird in den folgenden Abschnitten gezeigt.
Neben der Anzeige von Berechtigungen mit Get-ACL bietet die PowerShell auch die Möglichkeit, Berechtigungen anzupassen. Hierfür steht das Cmdlet Set-ACL zur Verfügung. Mit diesem Befehl können beispielsweise die Berechtigungen einer Datei oder eines Verzeichnisses auf eine andere Datei oder ein anderes Verzeichnis kopiert werden:
Get-Acl -Path "C:\datei1.txt" | Set-Acl -Path "C:\datei2.txt"
Im ersten Schritt liest Get-ACL die Berechtigungen aus und übergibt sie an Set-ACL, um die Berechtigungen auf dem Zielobjekt anzupassen. Das funktioniert auch von Ordner zu Ordner oder von Ordner zu Datei.
Wie Sie die Vererbung deaktivieren und manuell Rechte setzen
Mit Set-ACL ist es auch möglich, erweiterte Rechte zu setzen und zum Beispiel die Vererbung von Berechtigungen für einen Ordner oder eine Datei auszuschalten. Standardmäßig erben Verzeichnisse in Windows die Rechte von übergeordneten Verzeichnissen. In der PowerShell können diese Möglichkeiten genutzt werden, um zum Beispiel für eine Datei die Vererbung auszuschalten und explizite Rechte zu setzen. Dazu können verschiedene Systeme miteinander kombiniert werden.
Mit dem folgenden Befehl liest die PowerShell die Berechtigungen der Datei Daten.txt aus und speichert sie in einer Variablen:
$NewAcl = Get-Acl -Path "C:\Daten\Daten.txt"
Anschließend können die konfigurierten Rechte vor Vererbung geschützt werden, indem die folgende Variable gesetzt wird:
$isProtected = $true
Mit dem Wert $false kann die Vererbung aktiviert werden. Windows kann aber auch bei deaktivierter Vererbung die geerbten Rechte für die jeweilige Datei übernehmen. Auch das kann durch das Setzen einer Variablen erreicht werden:
$preserveInheritance = $true
Der Befehl wird dann auf Basis der definierten Variablen ausgeführt:
$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)
Set-Acl -Path "C:\Daten\Daten.txt" -AclObject $NewAcl
Der Befehl setzt die Zugriffsrechte vom Ordner C:\Daten auf die Datei Daten.txt und deaktiviert die Vererbung. Gleichzeitig können auf diese Weise auch Rechte direkt gesetzt werden. Auf ähnliche Weise ist es auch möglich, den Besitzer eines Ordners zu ändern, zum Beispiel mit:
$acl = Get-Acl c:\daten
$object = New-Object System.Security.Principal.Ntaccount("joos\thomas")
$acl.SetOwner($object)
$acl | Set-Acl c:\daten
Dieses Beispiel ändert den Besitzer des Ordners C:\Daten auf den Benutzer thomas der Domäne joos.
Wie Sie Berechtigungen setzen und entfernen
Im folgenden Beispiel setzen wir die Rechte des Benutzers joos\thomas für den Ordner Vertrieb auf FullControl (Vollzugriff) und Allow (Zulassen). Dazu werden zunächst die aktuellen Rechte in einer Variablen gespeichert:
$acl = Get-Acl \\fs1\shared\vertrieb
Anschließend werden die neuen Rechte ebenfalls in einer Variablen gespeichert:
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Joos\thomas","FullControl","Allow")
Anschließend setzen wir die neue Zugriffsregeln und bearbeiten die Berechtigungen des Ordners:
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\vertrieb
Die gesetzten Rechte können auf die gleiche Weise wieder entfernt werden:
$acl = Get-Acl \\fs1\shared\vertrieb
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("joos\thomas","FullControl","Allow")
$acl.RemoveAccessRule($AccessRule)
$acl | Set-Acl \\fs1\shared\vertrieb
Neben FullControl stehen hier Read, Write und Modify zur Verfügung. Auch diese Rechte können hinzugefügt oder entfernt werden. Um alle Einträge zu entfernen, zum Beispiel um sie zurückzusetzen, verwendet man folgende Befehle:
$acl = Get-Acl \\fs1\shared\vertrieb
$usersid = New-Object System.Security.Principal.Ntaccount ("joos\thomas")
$acl.PurgeAccessRules($usersid)
$acl | Set-Acl \\fs1\shared\vertrieb
Diese Befehle können natürlich für verschiedene Benutzerkonten, Gruppen und Freigaben oder Ordner verwendet werden. In einem weiteren Beispiel setzen wir die Rechte des Benutzers thomas für die Datei geheim.txt im Verzeichnis D:\Daten auf Lesen.
$Rechte = Get-ACL -Path “D:\Daten\geheim.txt”
$NEURechte = New-Object System.Security.AccessControl.FileSystemAccessRule(“joos\thomas”,”Read”,”Allow”)
$Rechte.SetAccessRule($NEURechte)
$Rechte | Set-Acl -Path “D:\Daten\geheim.txt”
Auf die gleiche Weise können auch Rechte für Ordner oder andere Rechte, die wir in diesem Artikel besprochen haben, gesetzt werden. Es ist auch möglich, mehrere Rechte zu setzen, zum Beispiel mit:
$NEURechte = New-Object System.Security.AccessControl.FileSystemAccessRule(“joos\thomas”,”ReadData,WriteData“,”Allow”)
Die wichtigsten Eigenschaften, die sich setzen lassen, sind die folgenden:
- AppendData: Daten anhängen
- ChangePermissions: Berechtigungen ändern
- CreateDirectories: Ordner erstellen
- CreateFiles: Datei erstellen
- Delete: Löschen
- FullControl: Vollzugriff
- ListDirectory: Ordner listen
- Modify: Ändern
- Read: Lesen
- ReadAndExecute: Lesen, Ausführen
- Write: Schreiben
- WriteData: Schreiben
Rechte lassen sich auf diesem Weg dann auch auslesen, zum Beispiel für den Ordner Windows:
Get-Acl -Path „C:\Windows“ | Select-Object -ExpandProperty Access | Format-Table -Autosize