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:18] 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.\\
Zeile 37: Zeile 37:
   * geerbtes erlaubt   * geerbtes erlaubt
  
-Ein explzites "verboten" würde also ein geerbtes "erlaubt" überschreiben.\\+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.1596097134.txt.gz · Zuletzt geändert: 2024/05/27 08:34 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki