Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:system:acls

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
powershell:system:acls [2020/07/30 10:10] henningpowershell:system:acls [2024/05/27 08:36] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-====== ACLs ======+====== NTFS-Berechtigungen und ACLs ======
 ===== NTFS-Berechtigungen ===== ===== NTFS-Berechtigungen =====
 Bei NTFS-Berechtigungen gibt einfache und erweiterte Berechtigungen. Man kann jede Berechtigung auf "Allow" oder "Deny" setzen.\\ Bei NTFS-Berechtigungen gibt einfache und erweiterte Berechtigungen. Man kann jede Berechtigung auf "Allow" oder "Deny" setzen.\\
  
-^Einfache Berechtigungen^^+Der folgende Powershell-Befehl listet alle Berechtigungen auf: 
 +<code powershell>[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])</code> 
 + 
 +==== Einfache Berechtigungen ====
 ^ Berechtigung ^ Auswirkung ^ ^ 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 | |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 |
Zeile 10: Zeile 13:
 |Read | Objekte und ihre Einstellungen sind sichtbar | |Read | Objekte und ihre Einstellungen sind sichtbar |
 |Write | Objekte können angelegt und geändert werden. | |Write | Objekte können angelegt und geändert werden. |
-^Erweiterte Berechtigungen^^+==== Erweiterte Berechtigungen ====
 ^ Berechtigung ^ Auswirkung ^ ^ 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. | | 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. |
Zeile 26: Zeile 29:
 |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. | |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.
 +<code powershell>get-acl \\path\to\source |fl </code>
 +{{:powershell:system:acl001.png?400|get-acl}}
 +
 +Um alle Berechtigungen innerhalb einer Verzeichnisstruktur in eine CSV-Datei zu exportieren, kann folgendes Skript verwendet werden:
 +<file powershell 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
 +</file>
 +
 +===== ACLs übertragen =====
 +Besitz an Quelle und Ziel ist Voraussetzung.
 +<code powershell>get-acl \\path\to\source  | Set-Acl \\path\to\target </code>
 +
 +===== 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__**
 +<code powershell>
 +$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
 +</code>
 +
 +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.
 +<code powershell>
 +$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
 +</code>
 +
 +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.\\
 +
 +<code powershell>
 +$acl = Get-Acl \\path\to\target 
 +$usersid = New-Object System.Security.Principal.Ntaccount ("DOMAIN\Username")
 +$acl.PurgeAccessRules($usersid)
 +$acl | Set-Acl \\path\to\target
 +</code>
 +
 +===== 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.
 +<code powersehll>
 +$acl = Get-Acl \\path\to\target
 +$acl.SetAccessRuleProtection($true,$false)
 +$acl | Set-Acl \\path\to\target
 +</code>
 +
 +Den Schritt rückgängig zu machen und die Vererbung wieder aktivieren:
 +<code powersehll>
 +$acl = Get-Acl \\path\to\target
 +$acl.SetAccessRuleProtection($false,$true)
 +$acl | Set-Acl \\path\to\target
 +</code>
  
 +===== 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.
 +<code powershell>
 +$acl = Get-Acl \\path\to\target 
 +$usersid = New-Object System.Security.Principal.Ntaccount ("DOMAIN\Username")
 +$acl.SetOwner($usersid)
 +$acl | Set-Acl \\path\to\target
 +</code>
powershell/system/acls.1596096624.txt.gz · Zuletzt geändert: 2024/05/27 08:35 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki