执行icacls命令移除权限继承时丢失权限条目问题求解
问题原因
你观察到的非继承SYSTEM权限条目消失属于icacls工具的默认重复ACE合并逻辑:原始权限中同时存在显式配置的NT AUTHORITY\SYSTEM完全控制条目,和从父级继承来的同身份同权限条目,执行/inheritance:d时工具会自动合并重复条目,实际权限并未丢失,只是合并为单条显式条目展示。
解决方案(推荐PowerShell方案,可完全保留原有所有条目)
方案1:PowerShell原生操作(无条目合并问题)
按顺序执行以下命令即可实现你最终的需求,且不会丢失任何原有显式权限条目:
- 获取目标路径的ACL对象
$path = "替换为你的目标文件夹路径" $acl = Get-Acl -Path $path
- 禁用权限继承,同时保留所有原有权限(包含你原有的显式SYSTEM权限)
# 第一个参数$true=禁用继承,第二个参数$true=保留原继承来的所有权限转为显式 $acl.SetAccessRuleProtection($true, $true)
- 删除
BUILTIN\Users对应的AppendData和CreateFiles权限
$removeRules = $acl.Access | Where-Object { $_.IdentityReference.Value -eq "BUILTIN\Users" -and $_.AccessControlType -eq "Allow" -and ($_.FileSystemRights -match "AppendData|CreateFiles") } foreach ($rule in $removeRules) { $acl.RemoveAccessRule($rule) | Out-Null }
- 将修改后的ACL配置写回目标文件夹
Set-Acl -Path $path -AclObject $acl
方案2:icacls命令操作
如果更习惯用icacls,可按以下步骤操作,注意该方法仍会合并重复ACE,但不影响实际权限有效性:
- 禁用继承并保留原有继承权限
icacls $path /inheritance:d
- 移除
BUILTIN\Users的创建文件、附加数据权限,保留原有读取执行权限
icacls $path /grant:r "BUILTIN\Users:(OI)(CI)RX"
验证
操作完成后执行(Get-Acl $path).Access | ft即可查看权限配置,确认所有预期权限保留、不需要的Users权限已删除。
内容的提问来源于stack exchange,提问作者Empty Coder
相关产品推荐
相关产品推荐

