继承与传播规则是什么
NTFS 权限默认从父目录往子目录传播,子项上带 (I) 标记的条目就是从父级继承来的,不能单独改;只有不带标记的才是这个对象自己显式设置的。理解这点能省下大量排查时间:看到某个子目录权限“莫名其妙”,先判断是继承还是显式,是继承就往上找,是显式才在当前层处理。(OI) 与 (CI) 则说明这条权限会向文件或子目录继续传播。
基本信息
| 适用平台 | NTFS 卷上的所有 Windows 版本 |
|---|---|
| 查看方式 | icacls 路径;Get-Acl 路径 | Select-Object -ExpandProperty Access |
| 继承标记 | (I) 继承来的,不可就地修改 |
| 传播标记 | (OI) 作用于文件、(CI) 作用于子目录、(IO) 仅当前项 |
| 断开方式 | icacls 路径 /inheritance:d 或 :r |
| 常见工具 | 高级安全设置对话框的权限条目列表 |
典型使用场景
- 排查“为什么这个目录权限与旁边不一样”,判断是继承还是显式
- 读懂 icacls 输出里的括号标记,避免误改继承条目
- 评估改父目录权限会造成多大范围影响
- 设计目录树:让下层继承成为常态,显式权限尽量少
- 接手历史目录时梳理权限来源,形成可维护的模型
常用示例
常用示例
icacls D:\Share # 看父目录的 ACL 与传播标记
icacls D:\Share\sub # 带 (I) 的条目来自父级继承
icacls D:\Share\sub /inheritance:d # 断开继承,先把继承条目复制为显式
icacls D:\Share\sub /inheritance:r # 直接移除继承条目
Get-Acl D:\Share\sub | Select-Object -ExpandProperty Access # 对象化查看
(Get-Acl D:\Share\sub).Access | Where-Object IsInherited -eq $false | Select-Object IdentityReference, FileSystemRights # 只看显式条目标记速查
| 标记 | 含义 | 影响 |
|---|---|---|
| (I) | 继承而来 | 父级改动会连带变化 |
| (OI) | 对象继承 | 对文件生效 |
| (CI) | 容器继承 | 对子目录生效 |
| (IO) | 仅当前对象 | 不再向下传播 |
| (F)/(M)/(RX) | 权限种类 | 完全控制/修改/读取执行 |
排查权限时的第一问永远是“这条是继承还是显式”:继承条目只能去上游改,在当前目录上怎么调都无效,这也是很多人改了半天没效果的原因。
想只看本目录自己设置了什么,可以筛掉 IsInherited 为真的条目,输出会立刻清爽许多,也更容易看出谁在什么时候加过一条特殊权限。