You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell配置根文件夹NTFS权限时同安全组多规则添加失败

故障原因
  • 核心错误是ACL规则写入方法调用错误:SetAccessRule()的内置逻辑为,若ACL中已存在同安全主体、同允许/拒绝类型的规则,会直接覆盖原有规则,而非追加新规则。写入第一条RW组的根目录权限后,执行第二条规则写入时,该方法直接覆盖了前一条同主体的允许规则,最终仅保留最后一次写入的规则,表现为第二条规则始终无法正常和第一条共存。
  • 权限范围配置错误:第二条Modify权限仅指定ContainerInherit,ObjectInherit继承标志时,规则会同时作用于当前根文件夹,不符合「仅子文件夹和文件生效」的设计要求,必须额外搭配InheritOnly传播标志,才能将规则作用范围完全排除当前根目录。
  • 现有第一条RW组的权限配置和预设需求不匹配:原代码写的CreateFiles,AppendData,ReadAndExecute缺少CreateDirectories(创建文件夹)权限,还多了不必要的AppendData权限,无法匹配最初设计的根目录最小权限要求。
修复代码

所有规则写入改用AddAccessRule()方法(该方法会追加新规则,不会覆盖同主体的不同配置规则),修正权限标志和继承配置,优化写入逻辑(所有规则配置完成后统一提交ACL,减少重复IO和写入异常概率),完整可直接运行的代码如下:

$RFolder = read-host "folder name"
$path = "C:$($RFolder)"

<# 清空所有现有NTFS权限 #>
$acl = Get-Acl $path
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
Set-Acl $path $acl

<# 禁用权限继承,保留原有继承权限转换为显式权限 #>
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True)
Set-Acl -Path $path -AclObject $acl

<# 统一配置所有NTFS权限规则 #>
$acl = Get-Acl $path

# 禁止域用户对根目录执行删除、修改权限、夺取所有权操作
$denyRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    "PMGTINC\Domain Users",
    "Delete, ChangePermissions, TakeOwnership",
    "None",
    "None",
    "Deny"
)
$acl.AddAccessRule($denyRule)

# 只读组:根目录、子文件夹、文件均授予读取执行权限
$roRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    "PMGTINC\SEC_$($RFolder)_Ro",
    "ReadAndExecute",
    "ContainerInherit,ObjectInherit",
    "None",
    "Allow"
)
$acl.AddAccessRule($roRule)

# RW组根目录权限:仅当前文件夹生效,授予遍历、列目录、读属性、读扩展属性、创建文件、创建文件夹、读权限
$rwRootRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    "PMGTINC\SEC_$($RFolder)_RW",
    "Traverse, ListDirectory, ReadAttributes, ReadExtendedAttributes, CreateFiles, CreateDirectories, ReadPermissions",
    "None",
    "None",
    "Allow"
)
$acl.AddAccessRule($rwRootRule)

# RW组子内容权限:仅子文件夹和文件生效,授予Modify权限
$rwChildRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    "PMGTINC\SEC_$($RFolder)_RW",
    "Modify",
    "ContainerInherit,ObjectInherit",
    "InheritOnly",
    "Allow"
)
$acl.AddAccessRule($rwChildRule)

# 所有规则配置完成后一次性写入ACL
$acl | Set-Acl $path
验证方法

脚本执行完成后,打开目标文件夹的「属性-安全-高级」面板,可看到RW安全组存在两条独立的允许规则:

  • 第一条适用范围为「只有此文件夹」,权限为预设的特殊权限,无修改、删除根目录的权限
  • 第二条适用范围为「子文件夹和文件」,权限为修改,用户可在子目录内正常编辑、创建、删除内容
    该配置可完全避免用户重命名、误删根文件夹的运维故障。

内容的提问来源于stack exchange,提问作者AndrewC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:39:27