如何使用 icacls 正确排序 NTFS ACL?

如何使用 icacls 正确排序 NTFS ACL?

我有一个 4 个子目录深的目录结构:[部门] -> [工作编号] -> [文档] -> [电子邮件]

在 [Docs] 级别,我有 4 个从根继承的组和一个显式组 (st_JobDocs)。全部继承到子文件夹。

st_JobAdmin: grant F
st_Job_R: grant RX
st_JobDocs: grant F
st_ITStorageAdmin: grant F
st_GlobalDeny: deny F

在级别 [Email] 我想要删除 st_JobDocs 和 st_Job_R 组;保留 st_GlobalDeny、st_ITStorageAdmin 和 st_JobAdmin;并添加 st_JobDocsEmail:(OI)(CI)(F)。

为此,我从[部门]级别开始:

for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /inheritance:d
for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /remove:g "st_Job_R"
for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /remove:g "st_JobDocs"
for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /remove:d "st_GlobalDeny""
for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /grant:r "st_JobDocsEmail":(OI)(CI)(F)
for /D %%D in (*) do for /D %%F in (%%D\Docs) do icacls "%%F\E-Mail" /deny "st_GlobalDeny":(OI)(CI)(F)

我以为通过删除 st_GlobalDeny 并将其添加到末尾,我将保持符合权限优先级:显式拒绝、允许、继承拒绝、允许。但出于某种原因,当我检查其中一个文件夹的安全选项卡时,我收到错误:

[dir] 上的权限顺序不正确,可能会导致某些条目无效。

有人能帮我理解一下这个顺序以及为什么我的顺序不正确吗?另外,有没有可以纠正顺序的命令行工具?

附带一个问题,是否可以使用 icacls 和 /inheritance:d 仅删除一个组的继承而不是全部删除?

谢谢!

答案1

未删除全局拒绝。在脚本示例中,/remove:d "st_GlobalDeny" 行末尾有一个多余的引号。

相关内容