Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:system:acls

NTFS-Berechtigungen und ACLs

NTFS-Berechtigungen

Bei NTFS-Berechtigungen gibt einfache und erweiterte Berechtigungen. Man kann jede Berechtigung auf „Allow“ oder „Deny“ setzen.

Der folgende Powershell-Befehl listet alle Berechtigungen auf:

[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])

Einfache Berechtigungen

Berechtigung Auswirkung
Full Controll Objekte können hinzugefügt, geändert oder entfernt werden (auch die Objekteinstellungen). Zusätzlich können die Berechtigungen für untergeordnete Objekte geändert werden
Modify Objekte können hinzugefügt, geändert oder entfernt werden (auch die Objekteinstellungen).
Read & Execute Objekte (und ihre Eigenschaften) sind sichtbar, Dateien können geöffnet und ausgeführt werden (auch Skripte)
Read Objekte und ihre Einstellungen sind sichtbar
Write Objekte können angelegt und geändert werden.

Erweiterte Berechtigungen

Berechtigung Auswirkung
Traverse Folder/Execute File In einer Struktur \\KEINE_BERECHTIGUNG_VORHANDEN\BERECHTIGUNG_VORHANDEN können die untergeordneten Verzeichnisse geöffnet werden, obwohl in dem übergeordneten Objekt Rechte fehlen. Auch ausführbare Dateien können geöffnet werden. Diese Berechtigung greift nur, wenn die berechtigte Gruppe der Benutzer _nicht_ die „Bypass Traverse Checking“ Berechtigung im Group-Policy-SnapIn hat.
List Folder / Read Data Der Verzeichnisinhalt ist sichtbar und Dateiinhalte können gelesen werden
Read AttributesObjekt-Attribute können angesehen werden (read-only, hidden,…)
Write AttributesObjekt-Attribute können geändert werden
Read Extended Attributes Erweiterte Objektattribute können eingesehen werden (Berechtigungen, Zeitstempel)
Write Extended Attributes Erweiterte Objektattribute können bearbeitet werden
Create Files / Write Data (nur an Verzeichnissen) Dateien können in diesem Verzeichnis angelegt, geändert und überschrieben werden.
Create Folders / Append Data (nur an Verzeichnissen) Verzeichnisse können angelegt werden. Dateien können geändert werden, vorhandene Inhalte aber nicht entfernt oder überschrieben
DeleteObjekte können gelöscht werden. Auch ohne diese explizite Berechtigung können Objekte gelöscht werden, wenn am übergeordneten Verzeichnis die Berechtigung „Delete Subfolders and Files“ besteht
Read Permissions Objektberechtigungen können gelesen werden
Change PermissionObjektberechtigungen können geändert werden
Take Ownership Der Objektbesitz kann übernommen werden. :!: Der Besitzer an eines Objekts kann kann die Objektberechtigungen auch ändern, wenn er nicht über diese Berechtigung verfügt
SynchronizeDas Objekt kann synchronisiert werden. Dadurch wird ein Prozess initialisiert, der auf einen bestimmten Zustand des Objekts wartet. Diese Berechtigung existiert nicht im ACL-Editor.

Vererbung

NTFS-Berechtigungen können entweder an dem Objekt selbst gesetzt (explicit) oder vom übergeordneten Objekt geerbt (inherited) worden sein.
Die Hirarchie der gesetzten Berechtigungen ist dabei wie folgt:

  • Explizit am Objekt verboten
  • Explizit am Objekt erlaubt
  • geerbtes verboten
  • geerbtes erlaubt

Ein explizites „verboten“ würde also ein geerbtes „erlaubt“ überschreiben.

ACLs

ACLs lesen

Das erste Powershell-Commandlet zur verwaltung von Berechtigungen ist Get-Acl; es listet alle Objekt-Berechtigungen.

get-acl \\path\to\source |fl 

get-acl

Um alle Berechtigungen innerhalb einer Verzeichnisstruktur in eine CSV-Datei zu exportieren, kann folgendes Skript verwendet werden:

Export-PermissionsToCsv.ps1
# Zu untersuchender Pfad
$path = "\\path\to\source"     
 
# Pfad zur CSV-Datei
$reportpath ="C:\data\ACL.csv" 
 
#Nach Verzeichnissen unterhalb des angegebenen suchen und für alle Fundstellen acl(permissions) auslesen
Get-ChildItem -Recurse $path | Where-Object { $_.PsIsContainer } `
  | ForEach-Object { $path1 = $_.fullname; Get-Acl $_.Fullname `
  | ForEach-Object { $_.access | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru }} `
  | Export-Csv $reportpath

ACLs übertragen

Besitz an Quelle und Ziel ist Voraussetzung.

get-acl \\path\to\source  | Set-Acl \\path\to\target 

NTFS-Berechtigungen setzen

Das Powershell-Commandlet Set-Acl ändert den Security-Descriptor eines Objekts (Datei, Verzeichnis, Reg-Key, …). Anders ausgedrückt „es ändert die Berechtigungen“. Im folgenden Beispiel wird dem Benutzer „Username“ Vollzugriff auf das Verzeichnis „\\path\to\target“ gewährt:
:!: Die Berechtigung wird nicht hinzugefügt, sondern bestehende Berechtigungen werden ersetzt

$acl = Get-Acl \\path\to\target 
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\Username","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl \\path\to\target

Andere Berechtigungen können der Tabelle entnommen werden:

BerechtigungBezeichnung in Powershell
FullControlFullControl
Traverse Folder / Execute File ExecuteFile
List Folder / Read Data ReadData
Read AttributesReadAttributes
Read Extended AttributesReadExtendedAttributes
Create Files / Change DataCreateFiles
Create Folders / Append Data AppendData
Write AttributesWrite Attributes
Write Extended AttributesWriteExtendedAttributes
Delete Subfolders and FilesDeleteSubfoldersandFiles
DeleteDelete
Read PermissionsReadPermissions

Darüber können die essentiellen Berechtigungen auch über Berechtigungs-Sätze vergeben werden:

Berechtigungs-Satzumfasst folgende BerechtigungenBezeichnung in Powershell
ReadList Folders / Read DataRead
Read Atributes
Read Extended Attributes
Read Permissions
WriteCreate Files / Write dataWrite
Create Folders / Append Data
Write Attributes
Write Extended Attributes
Read and ExecuteTraverse Folder / Execute FileReadAndExecute
List Folders / Read Data
Read Attributes
Read Extended Attributes
Read Permissions
ModifyTraverse Folder / Execute FileModify
List Folders / Read Data
Read Attributes
Read Extended Attributes
Read Permissions
Create Files / Write data
Create Folders / Append Data
Write Attributes
Write Extended Attributes
Delete

Berechtigungen entfernen

Nur die Berechtigung „Allow FullControl“ für den Benutzer „DOMAIN\Username“ aus den vorhandenen Berechtigungen entfernen.

$acl = Get-Acl \\path\to\target 
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\Username","FullControl","Allow")
$acl.RemoveAccessRule($AccessRule)
$acl | Set-Acl \\path\to\target

Wenn der Benutzer noch die Berechtigung „Deny FullControl“ zugewiesen hat, kann diese mit „PurgeAccessRules“ entfernt werden:

:!: „PurgeAccessRules“ funktioniert nicht mit Strings, sondern nur mit SIDs. Die Klasse „Ntaccount“ kann verwendet werden, um den String des Accountnamen zur SID zu konbvertieren.
:!: Der Befehl funktioniert nur bei direkt am Objekt gesetzten und nicht bei geerbten Berechtigungen.

$acl = Get-Acl \\path\to\target 
$usersid = New-Object System.Security.Principal.Ntaccount ("DOMAIN\Username")
$acl.PurgeAccessRules($usersid)
$acl | Set-Acl \\path\to\target

Vererbung aktivieren und deaktivieren

Für die Verwaltung der Vererbung wird die Methode „SetAccessRuleProtection“ verwendet. Sie verfügt über zwei mögliche Stati: „$true“ und „$false“.

  • Der erste Parameter aktiviert ($false) oder deaktiviert ($true) die Vererbung von übergeordneten Berechtigungen.
  • Der zweite Parameter entscheidet darüber, ob bestehende geerbte Berechtigungen erhalten bleiben sollen ($true) oder nicht ($false).

Beispiel: Die Vererbung zum Verzeichnis „\\path\to\target“ soll unterbrochen und die bislang geerbten Berechtigungen entfernt werden:
:!: Explizit gesetzten Berechtigungen bleiben erhalten.

$acl = Get-Acl \\path\to\target
$acl.SetAccessRuleProtection($true,$false)
$acl | Set-Acl \\path\to\target

Den Schritt rückgängig zu machen und die Vererbung wieder aktivieren:

$acl = Get-Acl \\path\to\target
$acl.SetAccessRuleProtection($false,$true)
$acl | Set-Acl \\path\to\target

Besitz von Verzeichnissen und Dateien ändern

Der Besitzer eines Objekts wird mit der Methode „SetOwner“ geändert.
Beispiel: Den Benutzer „Username“ zum Besitzer des Ordners „\\path\to\target“ machen:
:!: Der Benutzer „Username“ muss über die Berechtigungen „Take Ownership“, „Read“ und „Change Permission“ verfügen.

$acl = Get-Acl \\path\to\target 
$usersid = New-Object System.Security.Principal.Ntaccount ("DOMAIN\Username")
$acl.SetOwner($usersid)
$acl | Set-Acl \\path\to\target
powershell/system/acls.txt · Zuletzt geändert: 2024/05/27 08:36 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki