PowerShell

Access Control Lists

Leerdoelen

  • Het wijzigen van ACLs via PowerShell

Rechten op folders en bestanden

  • Microsoft gebruikt ACLs
    • Access Control Lists
  • Lijsten die bepalen wie ergens toegang toe heeft:
    1. Gebruiker A heeft lees- en schrijfrechten
    2. Gebruiker B heeft leesrechten
    3. Gebruiker C heeft lees-, schrijf- en verwijderrechten

Objecten

  • Alles is een object
  • Dus de ACL (list) is een object
  • Maar elke rule in de lijst is ook een object
  • Je hebt objecten in objecten

Vraag rechten op

Get-Acl -path $home\Logfiles
  • De standaard output is een tabel waarin veel verloren gaat
Get-Acl -path Logfiles | Format-List
Get-Acl -path Logfiles | Format-List -Property Path,Access
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl

Set ACLs

  • Start PowerShell als administrator
  • Set-Acl heeft een object als input nodig
  • Kopieer een ACL:
$DocACL = Get-Acl -Path "Documents"
Set-Acl -Path "Logfiles" -AclObject $DocACL
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-acl

ACL properties

$DocACL | Get-Member -MemberType Property
   TypeName: System.Security.AccessControl.FileSecurity

Name                    MemberType Definition
----                    ---------- ----------
AccessRightType         Property   type AccessRightType {get;}
AccessRuleType          Property   type AccessRuleType {get;}
AreAccessRulesCanonical Property   bool AreAccessRulesCanonical {get;}
AreAccessRulesProtected Property   bool AreAccessRulesProtected {get;}
AreAuditRulesCanonical  Property   bool AreAuditRulesCanonical {get;}
AreAuditRulesProtected  Property   bool AreAuditRulesProtected {get;}
AuditRuleType           Property   type AuditRuleType {get;}

ACL methods

$DocACL | Get-Member -MemberType Method
   TypeName: System.Security.AccessControl.FileSecurity

Name                    MemberType Definition
----                    ---------- ----------
AddAccessRule             Method  void AddAccessRule(System.Security.AccessControl.FileSystemAccessRule rule)
ModifyAccessRule          Method  bool ModifyAccessRule(System.Security.AccessControl.AccessControlModifica...
PurgeAccessRules          Method  void PurgeAccessRules(System.Security.Principal.IdentityReference identity)
RemoveAccessRule          Method  bool RemoveAccessRule(System.Security.AccessControl.FileSystemAccessRule ...
RemoveAccessRuleAll       Method  void RemoveAccessRuleAll(System.Security.AccessControl.FileSystemAccessRu...
RemoveAccessRuleSpecific  Method  void RemoveAccessRuleSpecific(System.Security.AccessControl.FileSystemAcc...
ResetAccessRule           Method  void ResetAccessRule(System.Security.AccessControl.FileSystemAccessRule r...
SetAccessRule             Method  void SetAccessRule(System.Security.AccessControl.FileSystemAccessRule rule)
SetGroup                  Method  void SetGroup(System.Security.Principal.IdentityReference identity)
SetOwner                  Method  void SetOwner(System.Security.Principal.IdentityReference identity)

Wijzigen Owner

Opvragen eigen gegevens:
whoami
denniswin11\dleeu
Wijzigen ACL owner:
$NewOwner = New-Object \
  System.Security.Principal.NTAccount("denniswin11", "dleeu")
$DocACL.SetOwner($NewOwner)

Wijzigen ACLs

# Files to work on
$Source = "C:\Pets\Dog.txt"
$Destination = "C:\Pets\Dog.txt"
# Haal de ACLs op
$NewAcl = Get-Acl -Path $Source
# New properties
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
# Create new rule
$newParams = @{
  TypeName     = 'System.Security.AccessControl.FileSystemAccessRule'
    ArgumentList = $identity, $fileSystemRights, $type
}
$fileSystemAccessRule = New-Object @newParams
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path $Destination -AclObject $NewAcl

Samenvatting

  • We hebben ACLs gelezen met Get-ACL
  • En ACLs gekopieerd met Set-ACL
  • en we hebben ACLs gewijzigd