继承的两套实现
Windows 的 NTFS 用继承标志描述「这条权限是否向下传播」,并区分是否对文件、对目录生效;Linux 侧则以默认 ACL 承担同样角色——目录上设置默认 ACL 后,在其中新建的子项会带上对应条目。两套机制的目标一致:让权限在设计好的层级上自动展开。区别在于显式设置的条目优先于继承来的条目,而继承链一旦被复制工具或重设操作打断,子目录就可能保留旧权限或退回默认。
基本信息
| 适用平台 | Windows NTFS 与 Linux ext4/XFS(含 Samba 与 NFS 共享) |
|---|---|
| NTFS 查看 | icacls、资源管理器安全选项卡中的继承标记 |
| POSIX 查看 | getfacl(d: 前缀为默认 ACL) |
| NTFS 关键标志 | (OI) 对象继承、(CI) 容器继承、(IO) 仅继承 |
| POSIX 设置 | setfacl -d -m g:组:rwx 目录 |
NTFS 继承标志读法
| 标志 | 含义 | 典型出现 |
|---|---|---|
| (OI) | 文件继承 | 新建文件带上该条目 |
| (CI) | 目录继承 | 新建子目录带上该条目 |
| (IO) | 仅继承不生效 | 父目录本身不受该条目约束 |
| 显式条目 | 本层直接授权 | 不会被父目录改动覆盖 |
| 拒绝条目 | 显式拒绝 | 优先于允许,需重点核对 |
查看与设置
查看与设置
# Windows:查看含继承标记的完整权限(标志含义见上表)
icacls D:\data
# Windows:用带继承标志的条目向下授权,新子项自动生效
icacls D:\data /grant 'EXAMPLE\dev:(OI)(CI)M' /T /C
# Linux:给目录设置默认 ACL,使新建子项自动继承
getfacl -m g:dev:rwx /srv/data && setfacl -d -m g:dev:rwx /srv/data
getfacl /srv/data # 输出中 d: 开头的就是默认 ACL复制与移动对继承的影响
| 操作 | 源权限是否保留 | 说明 |
|---|---|---|
| 同卷内移动 | 保留 | 对象仍在同一文件系统,ACL 随对象走 |
| 跨卷移动 | 按目标目录继承 | 多数实现下按新位置重新继承 |
| 复制到新位置 | 按目标目录继承 | 除非显式要求保留权限 |
| 用保留权限的工具复制 | 保留 | 需要显式参数,普通复制不带 |
「新文件权限不对」通常不是权限位错了,而是没有默认 ACL 或继承标志:只在当前目录授权,新建子目录就回到默认。设计共享目录时应先把继承关系定好,再往里放数据,事后补继承会造成一段时间内新旧子项权限不一致。
批量重置继承(例如递归 reset)会同时清掉显式授权条目,正在使用这些权限的账号会立刻失去访问。执行前先导出权限清单,并选择业务低峰窗口。