Inhaltsverzeichnis
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 Attributes | Objekt-Attribute können angesehen werden (read-only, hidden,…) |
| Write Attributes | Objekt-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 |
| Delete | Objekte 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 Permission | Objektberechtigungen können geändert werden |
| Take Ownership | Der Objektbesitz kann übernommen werden. |
| Synchronize | Das 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
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:
| Berechtigung | Bezeichnung in Powershell |
|---|---|
| FullControl | FullControl |
| Traverse Folder / Execute File | ExecuteFile |
| List Folder / Read Data | ReadData |
| Read Attributes | ReadAttributes |
| Read Extended Attributes | ReadExtendedAttributes |
| Create Files / Change Data | CreateFiles |
| Create Folders / Append Data | AppendData |
| Write Attributes | Write Attributes |
| Write Extended Attributes | WriteExtendedAttributes |
| Delete Subfolders and Files | DeleteSubfoldersandFiles |
| Delete | Delete |
| Read Permissions | ReadPermissions |
Darüber können die essentiellen Berechtigungen auch über Berechtigungs-Sätze vergeben werden:
| Berechtigungs-Satz | umfasst folgende Berechtigungen | Bezeichnung in Powershell |
|---|---|---|
| Read | List Folders / Read Data | Read |
| Read Atributes | ||
| Read Extended Attributes | ||
| Read Permissions | ||
| Write | Create Files / Write data | Write |
| Create Folders / Append Data | ||
| Write Attributes | ||
| Write Extended Attributes | ||
| Read and Execute | Traverse Folder / Execute File | ReadAndExecute |
| List Folders / Read Data | ||
| Read Attributes | ||
| Read Extended Attributes | ||
| Read Permissions | ||
| Modify | Traverse Folder / Execute File | Modify |
| 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

