Mit Hilfe von Access Control Lists (kurz ACL) ist es möglich, einzelnen Nutzern (oder auch Gruppen) gezielt Rechte an einzelnen Dateien bzw Diensten zu gewähren oder zu entziehen. Siehe auch [[icacls]]. ACLs werden aber auch auf [[switch|Switches]], [[router|Routern]] oder [[firewall|Firewalls]] eingesetzt um den Traffic zu kontrollieren. ACLs erweitern die Standard-Dateiberechtigungen, indem sie zusätzliche Benutzer und Gruppen sowie spezifische Berechtigungen für Dateien und Verzeichnisse ermöglichen. Dadurch können feinere Zugriffskontrollen implementiert werden. =====Linux===== Du kannst ACLs auf einem [[Linux]] Dateisystem aktivieren, das das ACL-Feature unterstützt (wie z. B. ext2, ext3, ext4). # ACLs für eine Datei festlegen setfacl -m u:username:permissions filename # ACLs für ein Verzeichnis festlegen setfacl -m d:u:username:permissions directory # ACLs anzeigen getfacl filename # ACLs entfernen setfacl -x u:username filename =====Windows===== ### Get ACL Write-Output "Current:" get-acl -path "\\fileserver\public\gbi\berechtigungsaudit\test" | %{ $_.Access | %{ "$($_.IdentityReference); $($_.FileSystemRights); $($_.IsInherited)" } } ### Modify ACL $NewAcl = Get-Acl -Path "\\fileserver\public\gbi\berechtigungsaudit\test" # Properties $identity = "d2000\s_importexport" $fileSystemRights = "FullControl" $type = "Allow" # Create new rule $fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type $fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList # Apply new rule $NewAcl.SetAccessRule($fileSystemAccessRule) Set-Acl -Path "\\fileserver\public\gbi\berechtigungsaudit\test" -AclObject $NewAcl Write-Output "After Modify:" get-acl -path "\\fileserver\public\gbi\berechtigungsaudit\test" | %{ $_.Access | %{ "$($_.IdentityReference); $($_.FileSystemRights); $($_.IsInherited)" } } ### Remove ACL $Acl = Get-Acl -Path "\\fileserver\public\gbi\berechtigungsaudit\test" # Properties $Identity = "d2000\s_importexport" $FileSystemRights = [System.Security.AccessControl.FileSystemRights]::FullControl $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]::None $PropagationFlags = [System.Security.AccessControl.PropagationFlags]::None # Create rule to remove $RuleToRemove = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $Identity, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType $Acl.RemoveAccessRule($RuleToRemove) # Apply rule Set-Acl -Path "\\fileserver\public\gbi\berechtigungsaudit\test" -AclObject $Acl Write-Output "After Remove:" get-acl -path "\\fileserver\public\gbi\berechtigungsaudit\test" | %{ $_.Access | %{ "$($_.IdentityReference); $($_.FileSystemRights); $($_.IsInherited)" } } Die InheritanceFlags bestimmen, ob und wie Berechtigungen vererbt werden. Die PropagationFlags dagegen beeinflussen das Verhalten dieser Vererbung. InheritanceFlags legen fest, ob und auf welche Arten von Objekten (Container oder Objekte) die ACL-Einträge vererbt werden. * ContainerInherit: Der ACL-Eintrag wird auf untergeordnete Ordner (Container) vererbt. * ObjectInherit: Der ACL-Eintrag wird auf untergeordnete Dateien (Objekte) vererbt. * None: Keine Vererbung auf untergeordnete Objekte. PropagationFlags beeinflussen wie die Vererbung angewendet wird wenn sie aktiviert ist (also wenn InheritanceFlags gesetzt sind). Sie kontrollieren die Weitergabe der Vererbung. * None: Es gibt keine Einschränkungen bei der Vererbung. Der Eintrag wird normal auf untergeordnete Objekte (Ordner und Dateien) vererbt. * NoPropagateInherit: Die Vererbung wird nur eine Ebene tief angewendet. Der Eintrag wird auf die direkte untergeordnete Ebene vererbt, aber die untergeordneten Objekte vererben diese Berechtigungen nicht weiter. * InheritOnly: Der ACL-Eintrag gilt nicht für das übergeordnete Objekt selbst, sondern nur für untergeordnete Objekte. ====Icacls==== Auch [[Windows]] unterstützt granulare Berechtigungseinstellungen. # ACLs für eine Datei festlegen icacls filename /grant username:permissions # z. B. R für Lesen, W für Schreiben und X für Ausführen. # ACLs für ein Verzeichnis festlegen icacls directory /grant username:permissions # ACLs anzeigen icacls filename # ACLs entfernen icacls filename /remove username