NTFS 权限基础
NTFS 权限分两层:图形界面里的读取、写入、修改、完全控制属于“基本权限”,它们其实是若干“高级权限”的组合视图;底层高级权限包括遍历目录、列出目录、创建文件、删除子项、取得所有权等十几项。搞清楚组合关系,才能看懂一条 ACL 究竟授权了什么。
基本信息
| 适用平台 | Windows 的 NTFS 卷,FAT32 与 exFAT 不支持 ACL |
|---|---|
| 基本权限 | 读取、写入、修改、完全控制等包装视图 |
| 高级权限 | 遍历目录、列出目录、读取属性、创建文件、删除子项、删除、取得所有权等细项 |
| 关键差异 | 写入通常不含删除,修改才包含删除 |
| 累积规则 | 权限按组取并集,显式拒绝优先于所有允许 |
| 常用工具 | icacls、Get-Acl、文件属性里的高级安全设置 |
典型使用场景
- 授权共享目录时判断该给读取还是修改
- 排查“能写入新文件却删不掉旧文件”这类现象
- 设计最小权限方案,避免一律给完全控制
- 理解账号加入多个组之后权限为何变大
- 数据迁移后核对权限是否与原位置保持一致
常用示例
常用示例
# 查看目录上的权限条目
(Get-Acl D:\Share).Access | Select-Object IdentityReference, FileSystemRights, AccessControlType
# 查看原始 SDDL,便于跨机比对
(Get-Acl D:\Share).Sddl
# 按对象方式追加一条权限,先确认再写回
$acl = Get-Acl D:\Share
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule('BUILTIN\Users','ReadAndExecute','ContainerInherit,ObjectInherit','None','Allow')
$acl.AddAccessRule($rule)
Set-Acl D:\Share $acl基本权限组合关系
| 基本权限 | 大体包含 | 说明 |
|---|---|---|
| 读取 | 读取数据、列出目录、读取属性 | 最常见的最小授权 |
| 写入 | 创建文件、写入数据、写属性 | 不包含删除已有内容的能力 |
| 修改 | 读取与写入,并包含删除 | 能删文件,授予时要谨慎 |
| 完全控制 | 全部权限与更改权限、取得所有权 | 等于对该目录完全支配 |
| 特殊权限 | 单项勾选的高级权限 | 在高级安全设置里逐项定制 |
最容易混淆的一点:写入不包含删除,修改才包含删除。很多“能保存新文件但删不掉旧文件”的故障,根源就是只授予了写入权限。
权限是累积的:账号从多个组获得的权限会取并集,因此“只加了一个只读组”也可能让实际权限变大。只有显式拒绝条目优先于所有允许条目。