Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:system:acls

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
powershell:system:acls [2020/07/30 09:42] – angelegt 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.\\
  
-^ Berechtigungsart ^ Berechtigung ^ Auswirkung ^ +Der folgende Powershell-Befehl listet alle Berechtigungen auf: 
-|Einfach |Full Controll / Vollzugriff | 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 | +<code powershell>[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])</code> 
-|Einfach |Modify / ändern |Objekte können hinzugefügt, geändert oder entfernt werden (auch die Objekteinstellungen).| + 
-|Einfach |Read & Aexecute / Lesen und Schreiben | Objekte (und ihre Eigenschaften) sind sichtbar, Dateien können geöffnet und ausgeführt werden (auch Skripte)| +==== Einfache Berechtigungen ==== 
-|Einfach |Read / Lesen| Objekte und ihre Einstellungen sind sichtbar | +^ Berechtigung ^ Auswirkung ^ 
-|Einfach |Write / Schreiben | Objekte können angelegt und 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 | 
-|Erweitert | 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. | +|Modify |Objekte können hinzugefügt, geändert oder entfernt werden (auch die Objekteinstellungen).| 
-|Erweitert |List Folder / Read Data| Der Verzeichnisinhalt ist sichtbar und Dateiinhalte können gelesen werden| +|Read & Execute | Objekte (und ihre Eigenschaften) sind sichtbar, Dateien können geöffnet und ausgeführt werden (auch Skripte)| 
-|Erweitert |Read Attributes|Objekt-Attribute können angesehen werden (read-only, hidden,...)| +|Read | Objekte und ihre Einstellungen sind sichtbar | 
-|Erweitert |Write Attributes|Objekt-Attribute können geändert werden (read-only, hidden,...)+|Write | Objekte können angelegt und geändert werden. | 
-|Erweitert |Read Extended Attributes| Erweiterte Objektattribute können eingesehen werden (Berechtigungen, Zeitstempel)| +==== Erweiterte Berechtigungen ==== 
-|Erweitert |Write Extended Attributes| Erweiterte Objektattribute können bearbeitet werden ||| +^ Berechtigung ^ Auswirkung ^ 
-|Erweitert |Create Files / Write Data| | +| 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. | 
-|Erweitert ||| +|List Folder / Read Data| Der Verzeichnisinhalt ist sichtbar und Dateiinhalte können gelesen werden| 
-|Erweitert ||| +|Read Attributes|Objekt-Attribute können angesehen werden (read-only, hidden,...)| 
-|Erweitert ||| +|Write Attributes|Objekt-Attribute können geändert werden | 
-|Erweitert |||+|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. :!: Der Besitzer an eines Objekts kann kann die Objektberechtigungen auch ändern, wenn er nicht über diese Berechtigung verfügt | 
 +|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.1596094960.txt.gz · Zuletzt geändert: 2024/05/27 08:35 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki