为子对象设置 ACL 规则

为子对象设置 ACL 规则

我有一个 PowerShell 脚本来创建一个目录(如果它不存在),然后确保只有 SYSTEM 和本地管理员帐户才有访问权限:

#Create directory if it does not already exist
$path = "C:\MyDirectory"
[System.IO.Directory]::CreateDirectory($path)

$acl = Get-Acl $path
$acl.SetAccessRuleProtection($true,$false)

$System = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl","Allow")
$acl.SetAccessRule($System)

$Admins = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl","Allow")
$acl.SetAccessRule($Admins)

$rules = $acl.access | Where-Object { 
    (-not $_.IsInherited) -and 
    $_.IdentityReference -like "AD\*" 
}
ForEach($rule in $rules) {
    $acl.RemoveAccessRule($rule) | Out-Null
}

$acl | Set-Acl $path

最后,我删除了授予任何可能之前被授予访问权限的域用户的权限。这对于父级来说很好,C:\MyDirectory但所有子对象(子文件夹和文件)都不会获得任何权限:

示例文件 ACL,显示没有用户具有任何权限

我不想C:\MyDirectory从 继承权限C:\,但我希望C:\MyDirectory从 继承子文件夹和子文件C:\MyDirectory

我该怎么做才能实现这个目标?

答案1

您需要在新规则上设置InheritanceFlagsPropagationFlags属性。默认情况下,它们不会被继承(None)。

$System = [System.Security.AccessControl.FileSystemAccessRule]::new(
  "SYSTEM",
  "FullControl",
  "ContainerInherit, ObjectInherit", # inheritanceFlags
  "InheritOnly", # propagationFlags
  "Allow"
)

根据您的目的,您可能还需要设置文件夹所有者。

相关内容