ICACLS选项:为什么在(OI)(OC)后面需要加上/t?

如果我使用ICACLS.exe命令在文件夹上设置权限,例如:
icacls "C:\Some\Directory" /grant "somedomain\someUser:(OI)(CI)F" /t
为什么需要/t选项?难道不是(OI)(CI)会导致权限继承到树中的所有对象吗? 更具体地说,假设在上面的例子中我有一个目录。假设该目录没有明确的权限定义。向该目录添加明确的权限"somedomain\someUser:(OI)(CI)F"将毫无意义,因为它已经被继承了。icacls是否会执行此操作?(编辑:是的,只要等待足够长的时间!)所以如果我知道一个目录树没有明确的权限,我真的不需要/t选项(在一个拥有数亿个文件的8TB目录树上浪费大量时间...)
2个回答

对一个简单的目录树进行实验表明:

1)(OI)(CI)确实会导致权限继承-当然是作为DACL中继承的ACE,而不是显式的ACE-应用于所有子对象(前提是子对象上的继承未被禁用),这是预期的结果。

2)/t选项会导致icacls遍历整个目录树,并将相同的权限作为显式权限添加到每个子目录中。

结果就是,如果查看子目录的安全权限,你会看到两个完全相同的条目,一个是继承的权限,另一个是目录的显式权限设置(除非在子目录或其他中间目录上禁用了继承)。

是否希望出现这种情况是另一个问题,但可能性较小。将权限指定两次并没有特别有用,除非你需要防范一些未来的更改。

在大规模文件系统上,这可能需要很长时间才能完成。

文档中提到的“无论是否设置继承权限”可能是为了提醒您:

1)如果权限包含(OI)(CI),则将显式权限复制到所有子目录中可能是不必要的。

但是

2)如果一个子目录设置为不继承权限,这实际上会实现一些重要的功能:在这样的目录上,权限不会从父目录继承(即(OI)(CI)继承被抑制),但是它仍然存在于其中,并作为显式权限添加。


1你的小型研究项目对我帮助非常大。我见过人们相当轻率地使用icacls /t选项(尤其是一些我认识的LLM)。递归应用显式权限的后果可能相当严重。如果目录没有继承权限,可能有原因在其中。递归应用显式继承权限可能会留下很大的混乱需要清理... - Shrout1

不是这样吗?(OI)(CI)会导致权限被继承吗? 不会。这在/t的描述中有解释: 引用: 遍历所有子文件夹以匹配文件/目录。这将应用权限更改到所有子文件夹,无论它们是否设置为从父级继承权限。 来源:icacls

这并没有真正回答我的问题。它说:如果未设置继承,则会将权限复制到所有子文件夹(显然实现了一些重要的目标);如果设置了继承,它也会复制权限,但没有说明为什么这是必要的!如果继承意味着继承,那我不明白为什么这是必要的。仅仅因为他们声明“是否设置为继承权限”就表明确实有一个问题需要回答。 - David I. McIntosh
@DavidI.McIntosh 有不同类型的继承。如果继承没有设置,或者设置为(IO)或其他与(OI)(CI)不同的组合,(OI)(CI)/t将把继承设置为(OI)(CI) - DavidPostill
David - 你还没在SU上达到100万声望吗?转眼之间,你就会比哈里“麦克爸爸”MC更高了! - Vomit IT - Chunky Mess Style
@DavidPostill :你的第二条评论仍然没有让我明白——肯定有一些基本的东西我没理解对吧?我编辑了我的问题,更加具体了一些。也许你可以再看一下?谢谢。 - David I. McIntosh