icacls 是新版工具,适用于 Windows Vista 及更高版本,提供了更强大的权限控制、更细粒度的管理以及更多的操作选项。在 PowerShell 中, 下面是 icacls 命令和 PowerShell 对应命令的对比:

icacls | Microsoft Learn

Windows NTFS 权限模型深度解构

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 重点:安全描述符组织架构、嵌套层级、继承链路、生效判断栈

一、底层原理

NTFS 权限不是简单 “文件挂一组权限”,是分层嵌套 + 继承 + 特权覆盖 + 安全参考监视器 (SRM) 判决的复合访问控制模型。 内核组件:SRM(安全参考监视器),位于内核,所有本地文件访问全部经过 SRM 校验;ntfs.sys 负责把安全描述符 SD 持久化存储到卷元文件$Secure,MFT 每条记录存储 SD 索引,不重复存储完整 SD(SD 去重节约磁盘)。

安全描述符 SD 顶层结构(第 0 层,根对象)

SecurityDescriptor SD
├─ Owner SID                 对象所有者
├─ Group SID                 主组(Windows极少使用)
├─ DACL 自主访问控制列表     用户/组允许/拒绝访问(业务权限主体)
└─ SACL 系统审计ACL          访问审计规则,不控制权限,只写日志

注意:Owner 本身携带隐式特权:WRITE_DACWRITE_OWNER哪怕 DACL 全部拒绝,所有者依然可以修改权限,这个是独立于 DACL 的特权,不属于 ACE 条目


二、DACL 内部组织架构(第 1 层)

DACL 是 ACE(Access Control Entry)条目的有序数组。 每条 ACE 结构:

ACE
├─ ACE类型:允许ACE / 拒绝ACE / 审计ACE(SACL内) / 完整性ACE(MIC)
├─ ACE标志位(继承控制标志)
│   ├─ CI ContainerInherit 容器继承(文件夹向下继承)
│   ├─ OI ObjectInherit 对象继承(文件向下继承)
│   ├─ IO InheritOnly 仅继承:本对象不生效,只传给子对象
│   ├─ NP NoPropagateInherit 不传播继承:只传给直接子一级,不再深层嵌套
│   └─ INHERITED_ACE 标记:此ACE来自父继承,不是本对象显式ACE
├─ Trustee SID:用户/组SID
└─ AccessMask 32位位掩码:细粒度权限位(RD WD AD X DE DC RC WDAC WO …)

ACE 强制排序规则(SRM 判决依赖顺序,不能乱)

  1. 显式拒绝 ACE
  2. 显式允许 ACE
  3. 继承拒绝 ACE
  4. 继承允许 ACE

拒绝优先原则:只要命中一条拒绝 ACE,直接拒绝访问,不再向后匹配。


三、完整嵌套层级模型(从卷根向下嵌套)

NTFS 权限是目录树嵌套继承模型,层级从卷根开始向下递归;每一个文件 / 文件夹都是独立安全对象。

层级 对象 说明
L0 NTFS 卷本身(\) 卷根安全描述符;所有顶层目录继承源头
L1 一级文件夹 D:\DirA 显式 SD / 继承卷根 SD
L2 二级子文件夹 D:\DirA\Sub1 继承 L1,也可设置独立显式 SD(断开继承)
L3 三级子文件夹 / 文件 D:\DirA\Sub1\file.txt 继承父 L2,可设置独立显式 SD
无限向下嵌套 理论无硬编码最大层级;受 NTFS 路径长度、MFT 资源限制

⚠️ 逻辑层级 vs 物理 MFT:

  • 逻辑嵌套层级可以无限深
  • 每个 MFT 记录对应 1 个安全对象;每个对象可以:①继承父 SD;②使用显式 SD(禁用继承)。

继承两种模式

  1. 启用继承(默认):子对象从直接父对象复制继承 ACE(标记INHERITED_ACE);父改权限,子自动刷新继承 ACE。
  2. 禁用继承
    • 模式 A:复制继承 ACE 转为本对象显式 ACE(对应 icacls /inheritance:d
    • 模式 B:完全删除所有继承 ACE,对象只保留手动新增显式 ACE(icacls /inheritance:r

关键点:继承只来自直接父目录,不是卷根直接全局下发;每一层可以切断继承,生成独立 SD

完整访问判决栈(SRM 判决多层判断顺序,非常重要)

当进程访问一个 NTFS 文件,SRM 按顺序逐层判断:

  1. 进程特权校验:是否SeSecurityPrivilegeSeTakeOwnershipPrivilege等特权;特权可以绕过部分 ACL。
  2. 判断:当前进程 Token 用户 SID 是否等于对象 Owner SID → 授予 Owner 固有特权(修改权限)
  3. 加载该对象 DACL 全部 ACE(显式 + 继承 ACE 已经合并在本对象 DACL 内,不是实时向上递归查询父目录!!
  4. 按 ACE 顺序逐条匹配进程 Token 内所有 SID(用户 + 全部所属组 SID)
    • 命中拒绝 ACE → 直接拒绝访问,判决结束
    • 命中允许 ACE → 累加 AccessMask 权限位
  5. 遍历全部 ACE 完成;有匹配允许位则放行;无任何允许命中则隐式拒绝。

✅重点误区纠正: ❌错误:访问文件的时候系统一层层向上查询父文件夹权限。 ✅正确:禁用 / 启用继承时,子对象就已经把继承 ACE 复制到自身 DACL;访问时只读取当前对象自己 DACL,不向上遍历父目录。父目录权限变更后,会向下传播更新子对象继承 ACE 缓存。


四、完整模型层级总表(由外到内,从系统到 ACE 位掩码)

0层:Windows安全子系统 SRM 安全参考监视器(内核,全局判决层)
    ↓
1层:NTFS卷 $Secure 安全描述符存储池(SD全局去重存储)
    ↓
2层:MFT文件记录:每个文件/文件夹引用一条SD(卷根L0,目录L1,子目录L2,文件L3…无限逻辑嵌套)
    ├─ SD.Owner / SD.Group
    ├─ SD.DACL → 第3层
    │    ├─ ACE[0] 显式拒绝
    │    ├─ ACE[1] 显式允许
    │    ├─ ACE[2] 继承拒绝
    │    └─ ACE[3] 继承允许 → 第4层
    │         ├─ ACE标志位(OI/CI/IO/NP/INHERITED_ACE)
    │         ├─ Trustee SID
    │         └─ AccessMask 32bit位掩码(第5层,最小权限单元)
    └─ SD.SACL(审计)
  • 逻辑目录嵌套层级:理论无上限,受 Windows 最大路径长度限制;
  • 权限模型内部数据嵌套一共 6 层:SRM → 卷 SD 存储池 → SD 安全描述符 → DACL 数组 → ACE 条目 → AccessMask 位掩码。

AccessMask 32 位掩码(最小权限单元,第 5 层)

32bit 每一位代表一项原子权限: RD(读数据)、WD(写数据)、AD(追加)、X(执行遍历)、DC(删除子项)、DE(删除)、RC(读取控制)、WDAC(写入DACL)、WO(写入Owner)等。 简易缩写F M RX R W D是多个 bit 的组合别名。


五、依赖文件

组件 作用
ntfs.sys 内核驱动;MFT 读写;$Secure 卷存储;SD 加载
advapi32.dll 用户态 API:GetNamedSecurityInfo / SetNamedSecurityInfo
lsass.exe SID、用户组 Token 解析;登录 Token 生成
srms.sys 安全参考监视器内核模块,访问判决核心

六、逻辑链路(修改权限完整时序)

  1. icacls / GUI / PowerShell 调用 SetNamedSecurityInfo
  2. advapi32.dll 传递 SD 结构到内核
  3. ntfs.sys 写入 / 复用 $Secure 池内 SD;更新 MFT 记录 SD 索引
  4. 如果开启继承:向所有子对象下发通知,刷新子对象内部继承 ACE 缓存
  5. 后续访问文件:SRM 读取当前对象自身 DACL 做判决,不再访问父目录

坑:大量目录递归修改权限,会触发大规模子对象继承 ACE 刷新,IO 极高。

七、边界约束

  1. 继承是 “向下复制缓存”,不是实时向上查询。切断继承之后,父目录权限变更不再影响该对象。
  2. Owner 特权独立 DACL 存在;即使 DACL 全部拒绝,Owner 可以修改权限,但不代表可以直接读写文件数据。
  3. 继承标志NP(NoPropagateInherit):本对象 ACE 只直接子一级生效,不再向更深层级嵌套传递。
  4. ReFS 复用完全一样 SD 权限模型;FAT32 无 SD 结构,ACL 完全无效。
  5. 符号链接:可以设置自身 SD;访问时默认解析到目标对象,使用目标对象 SD 判决。
  6. 孤立 SID:SID 在本地 / 域不存在,但 ACE 条目仍然保留在 DACL 中,会造成权限异常。

八、配套链 & 自动化流水线

运维工具对应模型操作

  1. takeown.exe:只修改 SD.Owner(第 2 层 SD 字段),不动 DACL/ACE。
  2. icacls.exe:读写 DACL、ACE 标志位、AccessMask;控制继承传播。
  3. PowerShell Get‑Acl:完整读取 SD 全部字段,包括 SACL;输出 SDDL 字符串(SD 完整文本序列化)。
  4. icacls /verify:校验 DACL 内 ACE 排序是否符合 SRM 规范。

PowerShell 查看完整层级结构示例

#读取完整SD对象
$acl = Get‑Acl "D:\test" -Audit
#输出SDDL文本,可以看到完整Owner/DACL/SACL全部层级编码
$acl.Sddl
#枚举每一条ACE
$acl.Access | Format‑Table

SDDL 简短示例(直观看到模型序列化)

O:S‑1‑5‑32‑544G:S‑1‑5‑32‑544D:(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)
O=Owner SID
G=Group SID
D=DACL部分;每条(A=允许;OICI标志;FA完全访问;;SID)

Windows NTFS 访问控制全套原生工具栈(Win10/Win11‑2026 最新)

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 工具全集:icacls.exetakeown.execacls.exe(废弃)、资源管理器安全 GUI、PowerShell Get‑Acl/Set‑Acl;底层统一基于 Windows 安全参考监视器 SRM + NTFS 安全描述符 SD。

一、底层原理

1. NTFS 安全描述符 SD(存储于卷元文件$Secure,去重存储)Microsoft ...

四元组结构:

  1. Owner:所有者 SID;所有者固有特权:无视 DACL 拒绝,具备修改 SD 权限
  2. Group:主组(Windows 极少使用)
  3. DACL自主访问控制列表:控制谁读 / 写 / 执行;icacls /save仅保存 DACL
  4. SACL系统审计 ACL:记录访问审计事件;icacls 不读写 SACL

2. 安全子系统内核模型

  • SRM 安全参考监视器:内核态,所有 ACL 校验、特权校验统一入口;
  • 特权:SeTakeOwnershipPrivilege(夺取所有权)、SeRestorePrivilege(设置所有者),必须管理员提升 Token 才会启用;UAC 过滤管理员 Token 默认不携带完整特权博客园。
  • ACE 强制排序(GUI/icacls/PowerShell 全部遵循):
    1. 显式拒绝 ACE
    2. 显式允许 ACE
    3. 继承拒绝 ACE
    4. 继承允许 ACE
  • MIC 强制完整性控制:低完整性进程不能写入高完整性对象;由 icacls /setintegritylevel管理。
  • SDDL 字符串:安全描述符文本序列化格式(O:/G:/D:/S:),PowerShell 原生支持,可完整保存 Owner/DACL/SACL。

3. 各工具定位

工具 定位
icacls.exe 现代命令行,DACL、继承、MIC 完整性、DACL 备份还原;不能强制夺取 Owner
takeown.exe 仅修改 SD.Owner;解锁权限锁死对象;只改所有者,DACL 不变
cacls.exe 废弃遗留;不支持 MIC、精细继承、备份还原;仅兼容旧脚本Microsoft ...
资源管理器安全 UI 图形外壳;aclui.dll 封装,底层复用 advapi32 API;适合单点调试,不适合批量
PowerShell Get‑Acl / Set‑Acl .NET 包装原生 Win32 安全 API;唯一原生可完整读写 Owner+DACL+SACL+MIC 的系统组件,弥补 icacls 备份短板

二、依赖文件

组件 程序路径 核心依赖
icacls.exe C:\Windows\System32\icacls.exe advapi32.dll、aclui.dll、lsass.exe、ntfs.sys
takeown.exe C:\Windows\System32\takeown.exe advapi32.dll、lsass.exe、ntfs.sys
cacls.exe C:\Windows\System32\cacls.exe advapi32.dll、lsass.exe、ntfs.sys
资源管理器安全 UI explorer.exe + aclui.dll 对话框 explorer.exe、aclui.dll、advapi32.dll、lsass.exe、ntfs.sys
PowerShell ACL Cmdlet System.Security.AccessControl(.NET) advapi32.dll、lsass.exe、ntfs.sys

公共依赖释义

  1. advapi32.dll:Win32 安全 API GetNamedSecurityInfo / SetNamedSecurityInfo,读写对象安全描述符 SD。
  2. lsass.exe:SID ↔ 用户 / 组名双向翻译;本地 SAM、域账号解析;域离线输出原始 SID 字符串。
  3. ntfs.sys:内核驱动,操作卷$Secure元数据,MFT 安全描述符持久化、内核访问校验。
  4. aclui.dll:权限掩码、继承标记解析、GUI 对话框渲染;takeown 不加载该 DLL。

三、依赖关系(调用链路)

takeown.exe

takeown.exe 参数解析 /f /r /c
    ↓
启用特权 SeTakeOwnershipPrivilege + SeRestorePrivilege
    ↓
advapi32.dll::SetNamedSecurityInfo 修改SD.Owner字段
    ↓
lsass.exe 获取当前进程用户SID
    ↓
系统调用 → ntfs.sys写入卷$Secure元数据更新安全描述符

icacls.exe

icacls.exe 参数解析 /grant /deny /save /restore /inheritance /setintegritylevel
    ↓
advapi32.dll Get/SetNamedSecurityInfo,读写DACL、MIC完整性标签
    ↓
lsass.exe SID名称转换
    ↓
ntfs.sys 更新$Secure元数据
    ↓
控制台输出 / 写入自定义aclfile备份文本(仅DACL)

资源管理器安全 UI

explorer.exe 右键属性‑安全‑高级
    ↓
aclui.dll渲染权限编辑对话框
    ↓
aclui.dll内部调用advapi32.dll安全API
    ↓
lsass SID翻译
    ↓
ntfs.sys读写SD

PowerShell Get‑Acl / Set‑Acl

PowerShell Cmdlet → .NET System.Security.AccessControl
    ↓
封装advapi32.dll Win32安全API,支持SDDL完整序列化
    ↓
lsass SID解析
    ↓
ntfs.sys读写完整SD(Owner+DACL+SACL+MIC)

运行前置约束

  1. 必须 NTFS/ReFS;FAT32/exFAT/UDFS 无安全描述符,全部 ACL 操作报错无效Microsoft ...。
  2. UAC:修改 Owner、批量 ACL 修改必须提升管理员权限;普通过滤管理员 Token 缺少特权,takeown 夺取所有权失败。
  3. Windows 资源保护 WFP 受保护对象:即使 takeown 接管,修改后 WFP 会自动还原原始权限;系统目录谨慎递归操作。
  4. 符号链接:
    • takeown:无/L参数,永远跟随目标对象,不能修改链接本身所有者;
    • icacls:/L操作符号链接自身;
    • GUI:默认跟随链接目标。

四、逻辑链路

标准锁死目录修复时序(生产标准流水线)

1. takeown /f "D:\LockedDir" /r /c
   → 将所有子对象Owner修改为当前管理员SID;DACL完全不变
2. icacls "D:\LockedDir" /reset /t /c
   → 清除显式DACL,恢复父目录继承ACL
3. icacls "D:\LockedDir" /grant Administrators:(F) SYSTEM:(F) /t /c
   → 重新授予业务权限
> 重要:takeown仅改Owner,**夺取所有权不等于获得访问权限,必须后续重设DACL**

备份还原两套链路对比

  1. icacls /save/restore
    • ✅优点:速度快,原生递归;
    • ❌缺陷:只备份 DACL;Owner、SACL 审计、MIC 完整性标签全部丢失,还原不会恢复
  2. PowerShell Export‑CliXml / Import‑CliXml
    • ✅完整保存 Owner、DACL、SACL、MIC 完整性标签;支持 SDDL 字符串导出;
    • ❌大目录批量速度低于 icacls。

继承参数一一映射(GUI ↔ icacls)

GUI 高级安全设置 icacls 参数
禁用继承 → 将继承的权限复制到此对象 icacls /inheritance:d
禁用继承 → 删除继承的权限 icacls /inheritance:r
启用继承 icacls /inheritance:e
重置为父项继承权限 icacls /reset

关键能力对照表

能力 icacls.exe takeown.exe cacls.exe 资源管理器 GUI PowerShell ACL
修改对象 Owner ❌不能强制夺取 ✅仅修改 Owner ✅完整读写
DACL 授权 / 拒绝 ACE ✅完整 ❌不处理 DACL ✅基础 ✅完整 ✅完整
OI/CI/NP 精细继承标记 ✅完整 ❌有限 ✅完整 ✅完整
MIC 完整性标签管理 ✅支持 ❌不识别 ✅支持 ✅支持
DACL 备份还原 ✅(/save /restore) ✅完整 SD 备份
SACL 审计读写 ❌不支持 ✅图形界面 ✅原生支持
符号链接操作 ✅(/L) ❌无参数 ✅支持

五、配套链

系统原生配套

  1. whoami /all:查看当前进程全部特权,校验SeTakeOwnershipPrivilege是否启用。
  2. 安全事件日志:开启 SACL 审计策略后,安全日志记录所有者变更、ACL 修改事件。
  3. SDDL 字符串:跨机器迁移权限、模板化部署。

运维工作流

  1. 权限锁死修复流水线:takeown → icacls /reset → icacls /grant
  2. 批量权限迁移:快速 DACL 备份用icacls /save;重要生产迁移优先 PowerShell 完整 SD 备份。
  3. 脚本规范:新脚本禁止使用废弃cacls.exe,优先 icacls;需要 SACL/Owner 完整备份使用 PowerShell。
  4. 排错辅助:icacls /verify扫描不规范乱序 ACL。

六、边界约束(风险坑点汇总)

分类 边界风险
takeown 边界 仅修改 Owner,DACL 保持原样;UAC 未提升管理员,特权缺失直接失败;无符号链接 / L 参数;接管 WFP 系统文件会被 Windows 资源保护自动回滚。
icacls 边界 /save只保存 DACL,丢失 Owner/SACL/MIC;不能强制夺取所有者;/grant:r仅替换该 SID 显式允许 ACE,不碰拒绝、继承 ACE;/inheritance:d/inheritance:r极易混淆造成权限丢失。
cacls 边界 已废弃;不支持 MIC、高级继承、备份还原;输出文本与 icacls 备份文件互不兼容,禁止新自动化脚本使用。
GUI 边界 适合单点调试;海量文件批量修改性能极差;底层行为等价命令行。
PowerShell ACL 边界 完整 SD 备份性能弱于 icacls;SDDL 字符串写错直接造成对象完全锁死。
文件系统边界 FAT32/exFAT 无安全描述符,全部 ACL 操作无效。
特权边界 修改 Owner、批量 ACL 必须提升管理员;普通用户返回拒绝访问。
符号链接边界 takeown 无法修改链接本身所有者;icacls 必须显式/L才操作链接自身。

卡脖子痛点

  1. takeown 执行完成直接访问文件仍然报错,忘记后续 icacls 重设 DACL;
  2. 将 icacls /save当作完整安全描述符备份,迁移后丢失所有者、审计 SACL;
  3. 直接递归修改 Windows 系统目录,触发 WFP 回滚,系统组件异常。

七、自动化流水线

批处理模板(锁死目录修复 + DACL 备份)

@echo off
set "TARGET=D:\LockedFolder"
::1.夺取所有者
takeown /f "%TARGET%" /r /c
::2.重置ACL恢复继承
icacls "%TARGET%" /reset /t /c
::3.分配权限
icacls "%TARGET%" /grant Administrators:(F) SYSTEM:(F) /t /c
::4.备份DACL(仅DACL)
icacls "%TARGET%" /save acl_dacl_backup.txt /T /C /Q

PowerShell 完整安全描述备份(弥补 icacls 短板,包含 Owner+DACL+SACL+MIC)

$path = "D:\LockedFolder"
#完整SD备份
Get‑Acl -Path $path -Audit | Export‑CliXml "Full_SD_Backup.xml"
#完整恢复
Import‑CliXml "Full_SD_Backup.xml" | Set‑Acl -Path $path

#导出SDDL字符串模板
$sd = Get‑Acl $path -Audit
$sd.Sddl | Out‑File "sd_template.txt"

PowerShell 批量巡检校验 ACL 规范性

$scanPath = "D:\Data"
& icacls $scanPath /verify /T /C | Out‑File "acl_verify_report.txt"

icacls.exe 深度解构

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 定位:Windows NTFS DACL 命令行管理工具,替代已废弃 cacls.exe;负责文件 / 文件夹自主访问控制列表、继承、所有者、强制完整性标签管理;仅作用于 NTFS 文件系统

一、底层原理

  1. NTFS 安全描述符 SD (Security Descriptor) 每个文件 / 文件夹在 MFT 主文件表记录内保存安全描述符 SD,结构四元组:
  • Owner 对象所有者 SID
  • Group 主组 SID
  • DACL 自主访问控制列表(icacls /save 只备份这一部分)
  • SACL 系统访问控制列表(审计 ACL,icacls 不读写)

⚠️ icacls /save / /restore 不保存 / 恢复 Owner、SACL、完整性标签,仅处理 DACL。

  1. ACE 访问控制项排序规则(Windows 强制校验) icacls 写入 ACL 会自动规范化重排 ACE 顺序,优先级从上到下:
  2. 显式拒绝 ACE
  3. 显式允许 ACE
  4. 继承拒绝 ACE
  5. 继承允许 ACE 使用 /verify 可检测乱序、损坏、格式不规范 ACL。
  6. 两套权限掩码体系
  • 简易缩写:F完全控制、M修改、RX读取执行、R只读、W写入、D删除;是底层多个位掩码的组合别名。
  • 细粒度底层掩码:DE、RC、WDAC、WO、RD、WD、AD、X、DC,对应 Win32 原生 32 位访问掩码比特。
  1. 继承标志位(OI/CI/IO/NP/I)

    标记 含义
    (OI) ObjectInherit 对象继承:子文件继承 ACE
    (CI) ContainerInherit 容器继承:子文件夹继承 ACE
    (IO) InheritOnly 仅继承:本对象不生效,仅传给子对象
    (NP) NoPropagateInherit:仅下一级,不再深层递归
    (I) Inherited:该 ACE 来自父对象继承,非本对象显式 ACE
  2. MIC 强制完整性控制/setintegritylevel 添加强制完整性标签 ACE:L低、M中、H高;低完整性进程不能写入高完整性对象。
  3. SID 解析机制 支持友好账号名;原始 SID 必须加前缀*,例*S‑1‑1‑0;本地账号由 LSASS 解析,域 SID 依赖域控。

二、依赖文件

文件 路径 核心职责
icacls.exe C:\Windows\System32\icacls.exe 主程序,解析命令行参数、业务逻辑、输出控制台 / 备份文件
advapi32.dll C:\Windows\System32\advapi32.dll Win32 安全 API:GetNamedSecurityInfo / SetNamedSecurityInfo;SID 名称转换 API
aclui.dll C:\Windows\System32\aclui.dll 权限字符串、继承标记 (OI/CI) 解析,与资源管理器安全 UI 共用同一套解析逻辑
ntfs.sys C:\Windows\System32\drivers\ntfs.sys NTFS 内核驱动;读写 MFT 内部安全描述符 SD;内核层访问权限校验
lsass.exe 系统进程 SID <--> 用户 / 组名双向翻译;本地安全账号数据库读取;域 SID 需要 RPC 交互域控制器

icacls /save 输出的 aclfile:自定义文本格式,不是注册表、不是二进制 SD,只能被 icacls /restore 解析

三、依赖关系

完整调用链路

icacls.exe 解析命令行参数
        ↓
advapi32.dll 安全API
        ↓
├─SID解析 → RPC调用 lsass.exe(本地/域账号解析)
└─GetNamedSecurityInfo / SetNamedSecurityInfo → 系统调用进入内核
        ↓
ntfs.sys 读写磁盘MFT记录中的安全描述符SD
        ↓
控制台输出 / 写入aclfile备份文本

运行前置约束

  1. 文件系统:必须 NTFS;FAT32/exFAT 没有 MFT 安全描述符,ACL 全部操作报错。
  2. 运行账号权限
    • 读取 ACL:对象需要 READ_CONTROL
    • 修改 DACL(/grant/deny /remove):需要 WRITE_DAC
    • 修改所有者 /setowner:需要 WRITE_OWNERicacls 不会强制夺取所有权,权限不足直接失败,必须搭配 takeown.exe
  3. 符号链接:默认跟随链接指向的目标;/L 参数才操作符号链接本身。
  4. 域环境:离线断网时,域 SID 无法翻译,输出原始 SID 字符串。

四、逻辑链路(子命令执行时序)

1. icacls name /save aclfile [/T /C /L /Q]

  1. /T开启递归,遍历目录树所有对象;
  2. 调用GetNamedSecurityInfo读取 SD,只提取 DACL,丢弃 Owner/SACL/ 完整性标签
  3. 将对象路径、ACE 条目、继承标记写入自定义文本 aclfile。

2. icacls directory /restore aclfile [/substitute SidOld SidNew] [/C /L /Q]

  1. 读取解析 aclfile 文本;
  2. 如有/substitute执行 SID 替换;
  3. 调用SetNamedSecurityInfo,仅把 DACL 写回 NTFS 对象;不触碰所有者、SACL、完整性标签

/T 在 restore 下无效,备份文件内已记录全部子项路径。

3. /setowner user

  1. 用户 / 组名解析为 SID;
  2. 修改 SD 内部 Owner 字段;

边界:无强制夺取权限;权限不足直接报错,需要前置 takeown。

4. /grant[:r] Sid:perm

  • 不带:r:叠加模式,新增 ACE,原有显式允许 ACE 保留;
  • :r:替换模式,清除该 SID 全部显式允许 ACE,只保留本次授予权限,不修改拒绝、继承 ACE;
  • 构造 ACE 加入 DACL,icacls 自动规范化重排 ACE 顺序。

5. /deny Sid:perm

新增显式拒绝 ACE;拒绝优先级最高;同时清除该 SID 同权限的允许 ACE。

6. /remove[:g|:d] Sid

  • 无后缀:删除该 SID 全部 ACE(允许 + 拒绝)
  • :g:仅删除允许 ACE
  • :d:仅删除拒绝 ACE

7. /inheritance:e|d|r

  • e:启用继承,恢复继承父目录 DACL;
  • d:禁用继承,把继承 ACE 复制为本对象显式 ACE(GUI:禁用继承→复制权限)
  • r:禁用继承,彻底删除全部继承 ACE(GUI:禁用继承→删除继承权限)

8. /reset

清除本对象所有显式 DACL;完全使用父目录继承下来的 ACL。

9. /findsid /verify

  • /findsid Sid:递归扫描,找出 DACL 中显式包含该 SID 的文件;
  • /verify:扫描 ACL 是否乱序、ACE 计数异常,识别损坏不规范 ACL。

10. /setintegritylevel

向 SD 添加 MIC 强制完整性 ACE,控制低完整性进程访问权限。

通用参数逻辑

  • /T:递归本目录及子文件子文件夹执行操作;
  • /C:遇到访问拒绝、错误不终止整体任务,输出错误继续执行;
  • /L:操作符号链接本身,而不是链接指向目标;
  • /Q:静默模式,屏蔽成功输出,仅输出错误信息。

五、配套链

系统原生配套工具

  1. takeown.exe:夺取对象所有者;处理权限锁死目录标准流程:takeown → icacls;icacls 无法强制夺取所有权。
  2. cacls.exe:旧版废弃工具;不支持完整性标签、精细继承控制、备份还原。
  3. 资源管理器安全 UI:文件夹属性→安全→高级安全设置;底层复用advapi32.dll+aclui.dll同一套 API。

脚本配套组件

  1. PowerShell Get‑Acl / Set‑Acl:.NET 封装同一套 Win32 安全 API;可以完整备份Owner+DACL+SACL 完整性标签,弥补 icacls /save缺失项。
  2. 备份还原组合工作流
    • icacls /save:快速批量备份 DACL;
    • PowerShell Export‑CliXml:完整全量安全描述符 SD 备份。

标准运维流水线(修复权限锁死目录)

takeown /f "D:\target_dir" /r /c
icacls "D:\target_dir" /reset /t /c
icacls "D:\target_dir" /grant Administrators:(F) SYSTEM:(F) /t /c

六、边界约束(坑点汇总)

边界分类 风险说明
备份还原边界 /save只保存 DACL;所有者、SACL 审计、完整性标签不会备份,restore 不会恢复,运维高频踩坑。
所有者边界 /setowner不能强制夺取所有权;权限不足直接失败,必须前置 takeown.exe。
继承参数混淆 /inheritance:d复制继承 ACE;/inheritance:r直接删除继承 ACE,两个参数行为差异巨大。
SID 格式坑 数字 SID 必须前缀*,如*S‑1‑1‑0,缺少 * 会解析失败。
符号链接边界 默认跟随链接目标;修改链接本身权限必须加/L
ACE 自动重排 手动构造乱序 DACL,icacls 写入时自动规范化排序;/verify用于检测异常 ACL。
共享权限隔离 icacls 只操作NTFS 本地 ACL,完全不处理 SMB 共享权限;网络访问有效权限 = NTFS ACL ∩ 共享权限。
拒绝 ACE 副作用 /deny添加显式拒绝,优先级最高;大量拒绝 ACE 会造成排错困难,尽量少用。
:r替换范围 /grant:r只替换该 SID显式允许 ACE,不碰拒绝 ACE、继承 ACE。
文件系统限制 FAT32/exFAT 没有安全描述符,ACL 全部命令报错。

卡脖子痛点:

  1. 误以为/save完整备份全部安全属性,丢失所有者、审计 SACL;
  2. 锁死对象直接调用 icacls 改所有者,忘记 takeown 全部操作失败;
  3. dr继承参数混淆,造成权限意外丢失。

七、自动化流水线(批处理 + PowerShell)

批处理模板

::备份DACL
icacls "D:\MyData" /save acl_backup.txt /T /C /Q

::还原DACL
icacls "D:\" /restore acl_backup.txt /C /Q

::授予管理员完全控制(替换原有显式权限)
icacls "D:\MyData" /grant:r Administrators:(F) SYSTEM:(F) /T /C

::禁用继承,复制继承ACE为显式权限
icacls "D:\MyData" /inheritance:d

::删除Everyone全部ACE
icacls "D:\MyData" /remove Everyone /T /C

::设置中等完整性级别
icacls "D:\MyData" /setintegritylevel M /T

PowerShell 脚本

$path = "D:\MyData"
#导出icacls权限报告
& icacls $path /T /C | Out‑File "acl_report.txt"

#校验ACL规范性
& icacls $path /verify /T /C

#修复锁死目录
takeown /f $path /r /c
icacls $path /reset /t /c
icacls $path /grant Administrators:(F) SYSTEM:(F) /t /c

完整安全描述备份(弥补 icacls 缺陷,包含 Owner/DACL/SACL)

#完整SD备份
Get‑Acl $path -Audit | Export‑CliXml "Full_SecurityDescriptor.xml"
#完整SD恢复
Import‑CliXml "Full_SecurityDescriptor.xml" | Set‑Acl $path

icacls.exe + takeown.exe + cacls.exe + 资源管理器安全 UI 完整解构

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 定位:Windows NTFS 访问控制全套原生工具栈。

  • icacls.exe:现代命令行 DACL / 继承 / 完整性标签管理
  • takeown.exe:仅修改安全描述符 Owner 所有者 SID,用于解锁权限锁死对象
  • cacls.exe:遗留兼容工具,功能残缺已废弃
  • 资源管理器安全 UI:图形交互外壳,底层和命令行共用同一套安全 API

一、底层原理

NTFS 安全描述符 SD 基础模型

SD 四元组:Owner(所有者SID) | Group | DACL自主访问控制列表 | SACL审计ACL

  1. Owner 特权规则:无论 DACL 如何拒绝,对象所有者天然拥有WRITE_OWNER权限,可以重设 ACL;这是takeown能够解锁文件的理论基础。
  2. takeown.exe只改写 Owner 字段,不改动 DACL、SACL、完整性标签。夺取所有权之后,再交由icacls.exe修改 DACL 权限。
  3. icacls.exe:操作 DACL、继承、MIC 完整性标签;没有能力强制修改 Owner,没有 SE_RESTORE 特权时直接报错
  4. cacls.exe:仅能读写基础 DACL;不识别 MIC 完整性标签、高级继承标志OI/CI/NP,无备份还原能力。
  5. 资源管理器安全 UI:aclui.dll做界面封装,不实现权限内核逻辑;读写 SD 全部转发advapi32.dll;GUI “禁用继承” 两个选项与 icacls 参数一一对应:
    • 复制继承权限 → icacls /inheritance:d
    • 删除继承权限 → icacls /inheritance:r
  6. ACE 规范化排序(四阶顺序,命令行与 GUI 统一)
    1. 显式拒绝 ACE
    2. 显式允许 ACE
    3. 继承拒绝 ACE
    4. 继承允许 ACE

二、依赖文件

组件 程序路径 核心依赖
icacls.exe %SystemRoot%\System32\icacls.exe advapi32.dll、ntfs.sys、lsass.exe、aclui.dll(字符串解析)
takeown.exe %SystemRoot%\System32\takeown.exe advapi32.dll、ntfs.sys、lsass.exe
cacls.exe %SystemRoot%\System32\cacls.exe advapi32.dll、ntfs.sys、lsass.exe
资源管理器安全 UI explorer.exe + aclui.dll 对话框 explorer.exe、aclui.dll、advapi32.dll、ntfs.sys、lsass.exe

公共依赖说明

  1. advapi32.dll:提供 Win32 安全 API GetNamedSecurityInfo / SetNamedSecurityInfo,读写 NTFS 对象安全描述符 SD。
  2. lsass.exe:SID ↔ 用户 / 组名双向解析;本地 SAM 账号、域账号翻译。
  3. ntfs.sys:内核驱动,MFT 记录持久化 SD,内核态访问权限校验。
  4. aclui.dll:权限掩码、继承标记解析与图形对话框渲染;takeown不加载此模块。

三、依赖关系

调用链路

takeown.exe

takeown.exe 解析命令行参数 /f /r /c
    ↓
advapi32.dll::SetNamedSecurityInfo 仅修改SD.Owner字段
    ↓
lsass.exe 解析当前进程Token得到当前用户SID
    ↓
系统调用进入内核 → ntfs.sys 将Owner SID写入MFT

icacls.exe

icacls.exe 参数解析(/grant /deny /save /restore /inheritance…)
    ↓
advapi32.dll Get/SetNamedSecurityInfo 读写SD(DACL、MIC完整性标签)
    ↓
lsass.exe SID名称转换
    ↓
ntfs.sys MFT读写安全描述符

cacls.exe

cacls.exe 参数解析
    ↓
advapi32.dll 仅读写DACL,忽略MIC标签,继承支持有限
    ↓
lsass SID解析
    ↓
ntfs.sys MFT读写

资源管理器安全 UI

explorer.exe 右键→属性→安全→高级
    ↓
加载aclui.dll渲染权限编辑对话框
    ↓
aclui.dll内部调用advapi32.dll安全API
    ↓
lsass SID翻译
    ↓
ntfs.sys 读写MFT安全描述符SD

前置运行条件

  1. 文件系统必须为NTFS;FAT32/exFAT 不存在安全描述符,全部 ACL 相关操作报错无效。
  2. takeown.exe需要管理员提升权限,需要开启特权SE_RESTORE_NAME;普通过滤管理员 Token 无法夺取所有者。
  3. icacls 修改 DACL 需要对象WRITE_DAC权限;修改 Owner 需要WRITE_OWNER无特权时不能强制夺取所有者
  4. 域环境离线场景:域 SID 无法解析,界面与命令行直接输出原始 SID 字符串。
  5. 符号链接:
    • takeown:无/L参数,总是跟随符号链接目标,不能修改链接本身所有者;
    • icacls:提供/L,可操作符号链接自身;
    • 资源管理器:默认跟随符号链接目标。

四、逻辑链路

标准解锁时序(权限锁死目录完整流水线)

1. takeown /f "D:\LockedDir" /r /c
   → 修改全部子对象Owner为当前管理员SID,DACL保持原样
2. icacls "D:\LockedDir" /reset /t /c
   → 清除显式DACL,恢复父目录继承ACL
3. icacls "D:\LockedDir" /grant Administrators:(F) SYSTEM:(F) /t /c
   → 重新授予业务需要的访问权限

各工具能力对比

能力 icacls.exe takeown.exe cacls.exe 资源管理器安全 UI
修改 Owner 所有者 ❌不能强制夺取 ✅仅修改 Owner ❌不支持 ✅支持
DACL 读写、授权拒绝 ✅完整支持 ❌不处理 DACL ✅基础支持 ✅完整支持
继承精细控制 OI/CI/NP ✅完整 ❌有限 ✅完整
完整性 MIC 标签 ✅支持 ❌不识别 ✅支持
DACL 备份 /restore 还原 ✅支持
符号链接操作 (/L) ✅支持 ❌无参数

关键行为边界

  1. takeown执行完成不等于拥有访问权限,必须后续 icacls 修改 DACL 才可以正常读写文件
  2. icacls /save只备份 DACL;Owner、SACL、MIC 标签不保存。
  3. cacls 输出文本格式与 icacls 备份文件互不兼容,不可混用还原。

五、配套链

系统原生配套

  1. PowerShell Get‑Acl / Set‑Acl:.NET 封装同一套 Win32 安全 API;可完整备份 SD 全部字段(Owner+DACL+SACL+MIC),弥补 icacls 备份缺陷。
  2. 事件日志:安全日志可以记录对象所有者变更、ACL 修改审计(需要开启 SACL 审计策略)。

运维配套工作流

  1. 锁死目录修复流水线:takeown → icacls /reset → icacls /grant
  2. 批量权限迁移:icacls /save备份 DACL;目标机器/restore恢复;重要场景搭配 PowerShell 做完整 SD 备份。
  3. 脚本兼容:新脚本禁止使用 cacls.exe,统一使用 icacls.exe。

六、边界约束(风险坑点)

分类 边界风险
takeown 边界 只改 Owner,DACL 不变;UAC 未提升管理员,夺取所有者直接失败;无符号链接 / L 参数。
icacls 边界 /save不保存 Owner/SACL/ 完整性标签;不能强制夺取所有者;/grant:r仅替换显式允许 ACE;/inheritance:d/inheritance:r极易混淆。
cacls 边界 已废弃;不支持 MIC、高级继承、备份还原;不要在新自动化脚本中使用。
GUI 边界 图形界面操作本质等价命令行;大量文件批量修改 GUI 性能极差,适合单点调试,批量优先命令行。
文件系统边界 FAT32/exFAT 无安全描述符,全部 ACL 操作无效。
特权边界 修改 Owner、批量 ACL 修改,都需要提升管理员权限;普通用户会出现拒绝访问。
符号链接 takeown 无法修改链接本身所有者,只能修改目标;icacls 需要显式/L

卡脖子痛点:

  1. 执行 takeown 之后直接访问文件仍然报错,忘记后续 icacls 重设 DACL;
  2. 使用 icacls 尝试直接修改锁死对象所有者,操作失败;
  3. 把 icacls /save当做完整安全描述符备份,迁移后丢失所有者、审计标签。

七、自动化流水线

批处理完整解锁模板

@echo off
set "TARGET=D:\LockedFolder"
::1.夺取所有者
takeown /f "%TARGET%" /r /c
::2.重置ACL,恢复继承
icacls "%TARGET%" /reset /t /c
::3.授予管理员、系统完全控制
icacls "%TARGET%" /grant Administrators:(F) SYSTEM:(F) /t /c
::4.备份DACL
icacls "%TARGET%" /save acl_backup.txt /T /C /Q

PowerShell 完整 SD 备份(弥补 icacls 备份缺陷)

$path = "D:\LockedFolder"
#完整安全描述备份,包含Owner、DACL、SACL、完整性标签
Get‑Acl -Path $path -Audit | Export‑CliXml Full_SD_Backup.xml
#完整恢复
Import‑CliXml Full_SD_Backup.xml | Set‑Acl -Path $path

PowerShell 批量巡检

$scanPath = "D:\Data"
& icacls $scanPath /verify /T /C | Out‑File acl_verify_report.txt

 

 

SnowShot_2025-11-21_18-16-34

SnowShot_2025-11-21_18-16-55

SnowShot_2025-11-21_18-17-17

SnowShot_2025-11-21_18-17-45

Windows NTFS 文件 / 文件夹安全 ACL 权限(截图界面完整解构)

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 截图序列:①文件夹属性‑安全选项卡 →②高级安全设置 →③权限项目编辑窗口;对象路径:C:\Users\Administrator\Desktop\优化条目,NTFS 访问控制列表 ACL 图形编辑器。

一、底层原理

  1. NTFS 元数据层面:每个文件 / 文件夹都存在一个安全描述符 SD (Security Descriptor),存储于 MFT 主文件表记录内部;安全描述符包含:所有者 SID、组 SID、DACL 自主访问控制列表、SACL 系统访问控制列表(审计)。
  2. DACL(自主访问控制列表):就是截图中一条条权限条目,每条 ACE 访问控制项包含:主体 SID (用户 / 组)、类型 (允许 / 拒绝)、访问掩码 (权限位)、继承标志、应用于范围
    • 截图②可见:继承于:C:\Users\Administrator\,权限从父文件夹继承而来;应用于:此文件夹、子文件夹和文件控制继承传播。
  3. 权限计算逻辑
    1. 拒绝 ACE 优先级 > 允许 ACE;只要存在拒绝,优先拦截访问。
    2. 先评估本对象 ACE,再评估继承下来 ACE;用户有效权限 = 用户 SID + 用户所属全部组 SID 合并后的权限集合。
    3. 所有者 (Owner) 特权:截图②所有者是Administrators,对象所有者可以无视 DACL,修改权限,这是 Windows 权限体系非常关键的后门机制。
  4. 继承机制:新建对象默认继承父目录 DACL;点击【禁用继承】可以切断继承,二选一:复制继承权限 / 删除继承权限。
  5. 访问掩码:截图③基本权限是高层封装;底层是32 位 bit 位掩码,完全控制、修改、读取执行都是多个底层 bit 的组合;点击「显示高级权限」可以看到原始细粒度 bit 权限。

注意:共享权限和 NTFS ACL 是两套独立权限;最终有效权限取两者交集,截图是 NTFS 本地 ACL,不是共享权限。

二、依赖文件

文件 / 组件 路径 作用
ntfs.sys %SystemRoot%\System32\drivers\ntfs.sys NTFS 内核驱动,读写 MFT 里面安全描述符 SD;内核完成访问权限校验
aclui.dll %SystemRoot%\System32\aclui.dll 截图全部安全 UI 对话框实现:属性安全页、高级安全设置、编辑权限项目全部由这个 DLL 渲染
advapi32.dll %SystemRoot%\System32\advapi32.dll Win32 安全 API:GetNamedSecurityInfo / SetNamedSecurityInfo 获取、设置对象安全描述符 SD
lsass.exe 系统进程 SID 解析、用户名‑SID 互相转换、用户组成员 SID 展开,UI 把 SID 翻译为人可读账号名称
MFT($MFT) NTFS 卷元数据,无直接文件路径 每个文件记录里面存储 Security Descriptor 安全描述符

注册表无直接存储:NTFS 安全描述符保存在磁盘 MFT,不在注册表。

三、依赖关系

完整调用链路(打开截图安全属性窗口)

资源管理器explorer.exe 右键文件夹 → 属性 → 安全选项卡
    ↓
explorer 加载 aclui.dll (ACL图形UI组件,截图全部窗口由它绘制)
    ↓
aclui.dll 调用 advapi32.dll API GetNamedSecurityInfoW
    ↓
内核转发到 ntfs.sys,读取磁盘MFT内该文件夹的安全描述符SD(DACL/所有者/SACL)
    ↓
aclui.dll RPC调用 lsass.exe:把SID翻译为用户名/组名,填充界面列表
    ↓
用户编辑权限、点应用 → SetNamedSecurityInfoW → ntfs.sys 将新SD写回MFT记录

外部依赖

  1. 文件系统必须是 NTFS;FAT32/exFAT 无安全描述符,安全选项卡会直接灰掉不可用。
  2. lsass.exe 正常运行:SID‑用户名解析依赖 lsass;lsass 异常界面会显示 SID 字符串而不是中文账号名。
  3. 权限依赖:修改 ACL / 所有者,需要对象 WRITE_DAC 权限;修改所有者需要 WRITE_OWNER 权限;普通读取安全页只需要 READ_CONTROL
  4. 继承依赖:父文件夹存在有效的 DACL;新建对象默认继承父 ACE。
  5. 域环境:域 SID 需要域控制器解析账号名称;断网会显示 SID。

四、逻辑链路(时序,对应三张截图操作)

  1. 第一幅截图【属性‑安全】: explorer 加载 aclui.dll,读取 MFT 安全描述,解析 DACL,展示组或用户名列表,展示简化后的基础权限勾选框;点击【编辑】进入权限修改;点击【高级 (V)】跳转第二张截图高级安全设置。
  2. 第二幅截图【高级安全设置】
    • 展示所有者、审核 SACL、完整 ACE 权限条目;每一条 ACE 显示:主体、类型、访问权限、继承来源、应用于范围。
    • 【禁用继承】:切断来自父文件夹的权限继承;
    • 选中 ACE,点击【编辑】,跳转第三张截图权限项目窗口。
  3. 第三幅截图【权限项目】
    • 主体:用户 / 组 SID;类型:允许 / 拒绝;应用于:控制继承传播范围(此文件夹 / 子文件夹 / 文件)
    • 基本权限是高层封装;点击【显示高级权限】展开底层细粒度 bit 掩码。
    • 勾选 / 取消权限 → 确定,构造新 ACE,写回对象 DACL。
  4. 点击全部窗口「应用」:调用SetNamedSecurityInfo将新安全描述符 SD 写入 NTFS MFT。

关键边界逻辑

  1. 继承于字段:代表这条 ACE 不是本对象显式设置,复制自父目录;禁用继承后该字段消失。
  2. 应用于:控制 ACE 向下传播到子文件夹、子文件;是 NTFS 继承体系核心。
  3. 所有者权限:哪怕 DACL 全部拒绝,对象所有者依然可以修改权限;这是 Windows 设计,用于防止彻底锁死对象。

五、配套链

  1. 图形配套
  • cacls.exe:旧版命令行 ACL 工具,已逐步废弃。
  • icacls.exe:现代 Windows ACL 命令行工具,查询、设置、备份、恢复 NTFS 权限。
  1. 编程接口
  • Win32 API:GetNamedSecurityInfo / SetNamedSecurityInfo
  • PowerShell:Get‑Acl / Set‑Acl,封装上面 Win32 API,脚本自动化操作 ACL。
  1. 运维配套
  • icacls 支持导出权限备份:icacls 路径 /save acl_backup.txt,可恢复权限。
  • 取得所有权:需要先修改所有者,才能修改被锁死对象 ACL。

六、边界约束 & 坑点

边界分类 详细说明
文件系统边界 FAT32/exFAT 无 SD 安全描述符,安全选项卡灰色;仅 NTFS 支持完整 ACL。
继承坑点 子对象 “不继承”;复制 / 移动文件夹权限行为不同:同卷移动保留原 ACL;跨卷复制继承目标父文件夹 ACL。
拒绝 ACE 优先级 拒绝条目优先级高于允许;GUI 顺序不影响计算结果,很多人误以为列表从上到下判断,实际不是顺序匹配。
所有者边界 对象所有者可以绕过 DACL 拒绝,修改权限;即使 DACL 全部拒绝访问,所有者依然可以编辑安全。
应用于边界 「仅将这些权限应用到此容器中的对象和 / 或容器」= 只给子对象,本对象不生效,容易配置错。
共享 + NTFS 交集 网络访问时,有效权限 = NTFS ACL 和 共享权限两者取最小交集;很多故障只改 NTFS 忽略共享权限。
SID 失效坑点 账号删除后,ACE 残留孤立 SID;UI 显示 SID 一串数字,无用户名。
加密 EFS 边界:EFS 加密文件,ACL 控制访问,但解密还需要用户 EFS 证书私钥,ACL 不能控制解密行为。  

卡脖子痛点

  1. 文件夹移动复制,继承行为不符合预期,权限错乱;
  2. 只看 DACL,忽略所有者特权,以为设置拒绝就完全锁死;
  3. 混淆「共享权限」和「NTFS 本地 ACL」,网络访问权限故障。

七、自动化流水线(PowerShell + icacls)

1、读取文件夹 NTFS 安全描述 ACL(替代 GUI 查看)

$path = "C:\Users\Administrator\Desktop\优化条目"
Get-Acl -Path $path | Format-List
# 查看详细ACE条目
(Get-Acl $path).Access

2、icacls 查询权限(命令行)

icacls "C:\Users\Administrator\Desktop\优化条目"

3、备份整个目录树 ACL 权限

icacls "C:\Users\Administrator\Desktop\优化条目" /save acl_backup.txt /t

4、恢复 ACL 备份

icacls "C:\Users\Administrator\Desktop\" /restore acl_backup.txt

5、PowerShell 添加一条允许 ACE(读取和执行,对应截图③勾选状态)

$path = "C:\Users\Administrator\Desktop\优化条目"
$acl = Get‑Acl $path
$identity = "Everyone"
# 权限:读取和执行,列出文件夹内容,读取
$rights = "ReadAndExecute, ListDirectory, Read"
$accessRule = New‑Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,"ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($accessRule)
Set‑Acl -Path $path -AclObject $acl

6、禁用继承,复制已继承权限到本对象

$acl = Get‑Acl $path
# 参数 $true = 将继承ACE复制为本对象显式ACE;$false = 删除继承权限
$acl.SetAccessRuleProtection($true,$true)
Set‑Acl -Path $path -AclObject $acl

说明:SetAccessRuleProtection($isProtected,$preserveInheritance) 等价 GUI【禁用继承】的两个选项。

SnowShot_2025-11-21_18-08-45

 

ICACLS命令 高级的文件和文件夹权限管理工具,支持更多功能
——————————————————————————————————————————————————————————————
ICACLS name /save aclfile [/T] [/C] [/L] [/Q]
将匹配名称的文件和文件夹的 DACL 存储到 aclfile 中以便将来与 /restore 一起使用。请注意,未保存 SACL、所有者或完整性标签。

ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile [/C] [/L] [/Q]
将存储的 DACL 应用于目录中的文件。

ICACLS name /setowner user [/T] [/C] [/L] [/Q]
更改所有匹配名称的所有者。该选项不会强制更改所有身份;使用 takeown.exe 实用程序可实现该目的。

ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
查找包含显式提及 SID 的 ACL 的所有匹配名称。

ICACLS name /verify [/T] [/C] [/L] [/Q]  
查找其 ACL 不规范或长度与 ACE计数不一致的所有文件。

ICACLS name /reset [/T] [/C] [/L] [/Q]  
为所有匹配文件使用默认继承的 ACL 替换 ACL。

ICACLS name [/grant[:r] Sid:perm[...]]
       [/deny Sid:perm [...]]
       [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L] [/Q]
       [/setintegritylevel Level:policy[...]]

    /grant[:r] Sid:perm 授予指定的用户访问权限。如果使用 :r,这些权限将替换以前授予的所有显式权限。
    如果不使用 :r,这些权限将添加到以前授予的所有显式权限。

    /deny Sid:perm 显式拒绝指定的用户访问权限。将为列出的权限添加显式拒绝 ACE,并删除所有显式授予的权限中的相同权限。

    /remove[:[g|d]] Sid 删除 ACL 中所有出现的 SID。使用
        :g,将删除授予该 SID 的所有权限。使用
        :d,将删除拒绝该 SID 的所有权限。

    /setintegritylevel [(CI)(OI)]级别将完整性 ACE 显式添加到所有匹配文件。要指定的级别为以下级别之一:
             L[ow]
             M[edium]
             H[igh]
        完整性 ACE 的继承选项可以优先于级别,但只应用于目录。

    /inheritance:e|d|r
        e - 启用继承
        d - 禁用继承并复制 ACE
        r - 删除所有继承的 ACE

——————————————————————————————————————————————————
注意:
    Sid 可以采用数字格式或友好的名称格式。如果给定数字格式,那么请在 SID 的开头添加一个 *。

    /T 指示在以该名称指定的目录下的所有匹配文件/目录上执行此操作。

    /C 指示此操作将在所有文件错误上继续进行。仍将显示错误消息。

    /L 指示此操作在符号链接本身而不是其目标上执行。

    /Q 指示 icacls 应该禁止显示成功消息。
————————————————————————————————————————————————————
    ICACLS 保留 ACE 项的规范顺序:
            显式拒绝
            显式授予
            继承的拒绝
            继承的授予

    perm 是权限掩码,可以指定两种格式之一:
        简单权限序列:
                N - 无访问权限
                F - 完全访问权限
                M - 修改权限
                RX - 读取和执行权限
                R - 只读权限
                W - 只写权限
                D - 删除权限
        在括号中以逗号分隔的特定权限列表:
                DE - 删除
                RC - 读取控制
                WDAC - 写入 DAC
                WO - 写入所有者
                S - 同步
                AS - 访问系统安全性
                MA - 允许的最大值
                GR - 一般性读取
                GW - 一般性写入
                GE - 一般性执行
                GA - 全为一般性
                RD - 读取数据/列出目录
                WD - 写入数据/添加文件
                AD - 附加数据/添加子目录
                REA - 读取扩展属性
                WEA - 写入扩展属性
                X - 执行/遍历
                DC - 删除子项
                RA - 读取属性
                WA - 写入属性
        继承权限可以优先于每种格式,但只应用于目录:
                (OI) - 对象继承
                (CI) - 容器继承
                (IO) - 仅继承
                (NP) - 不传播继承
                (I) - 从父容器继承的权限
————————————————————————————————————————
示例:

        icacls c:\windows\* /save AclFile /T
        - 将 c:\windows 及其子目录下所有文件的ACL 保存到 AclFile。

        icacls c:\windows\ /restore AclFile
        - 将还原 c:\windows 及其子目录下存在的 AclFile 内所有文件的 ACL。

        icacls file /grant Administrator:(D,WDAC)
        - 将授予用户对文件删除和写入 DAC 的管理员权限。

        icacls file /grant *S-1-1-0:(D,WDAC)
        - 将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限。

icacls.exe 完整解构

分析框架:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化 定位:Windows 现代 NTFS DACL 权限命令行工具,替代老旧 cacls.exe;操作 NTFS 安全描述符 DACL,支持备份还原、所有者、完整性标签、继承管理。

一、底层原理

  1. 内核对象基础 NTFS 每个文件 / 文件夹 MFT 记录存储安全描述符 SD,SD 包含:Owner(所有者)GroupDACL自主访问控制列表SACL审计ACL完整性标签ACE

⚠️ /save 仅保存 DACL;不保存所有者、SACL 审计、完整性标签,/restore也不会恢复这几项。

  1. ACE 排序规范(icacls 强制规范) icacls 写入 ACL 时会自动重排 ACE 顺序,Windows 访问校验遵循该优先级:
  2. 显式拒绝 ACE
  3. 显式允许 ACE
  4. 继承拒绝 ACE
  5. 继承允许 ACE

GUI 高级安全编辑器也遵循这套顺序;乱序 DACL 属于不规范 ACL,/verify可检测。

  1. 权限掩码两套体系
  • 简易权限缩写F完全、M修改、RX读取执行、R只读、W写入、D删除;是多细粒度位的组合封装。
  • 细粒度原始位掩码DE,RC,WDAC,WO,RD,WD,AD,X,DC…,对应 Win32 底层访问掩码比特位。
  1. 继承标志位(OI/CI/IO/NP)

    标记 含义
    (OI) ObjectInherit 对象继承:文件继承 ACE
    (CI) ContainerInherit 容器继承:子文件夹继承 ACE
    (IO) InheritOnly 仅继承,本对象不生效,只传给子对象
    (NP) NoPropagateInherit 不传播继承,只向下一级,不再递归深层
    (I) Inherited 该 ACE 是继承而来,非本对象显式 ACE
  2. 完整性标签(Mandatory Label) Windows 强制完整性控制 MIC;/setintegritylevel添加完整性 ACE:Low/Medium/High;低完整性进程无法写入高完整性对象。
  3. SID 解析:支持账号名,也支持*S‑1‑xxx原始 SID 数字格式。

二、依赖文件

组件 路径 作用
icacls.exe %SystemRoot%\System32\icacls.exe 主可执行程序
advapi32.dll %SystemRoot%\System32\advapi32.dll 底层 Win32 安全 API:GetNamedSecurityInfo / SetNamedSecurityInfo、SID 转换 API
aclui.dll %SystemRoot%\System32\aclui.dll 权限掩码、继承标记字符串解析(与资源管理器安全界面共用同一套逻辑)
ntfs.sys %SystemRoot%\System32\drivers\ntfs.sys NTFS 内核驱动,读写 MFT 中的安全描述符 SD,执行访问校验
lsass.exe 系统进程 SID ↔ 用户名 / 组名双向解析;处理本地账号、域账号 SID 翻译

备份输出的aclfile文本格式自定义格式文件,不是标准注册表,仅能被 icacls /restore读取。

三、依赖关系

调用链路

icacls.exe 命令行参数解析
    ↓
advapi32.dll Win32安全API
    ↓
1. SID名称解析 → RPC调用 lsass.exe
2. 获取/设置安全描述符SD → 系统调用转发内核
    ↓
ntfs.sys 读写磁盘MFT记录内SD(DACL/完整性标签)
    ↓
输出控制台文本 / 写入aclfile备份文件

前置依赖条件

  1. 文件系统必须为NTFS;FAT32/exFAT 无安全描述符,icacls 大部分参数报错。
  2. 运行身份权限:
    • 读取 ACL:需要对象READ_CONTROL权限。
    • 修改 DACL (/grant/deny /remove):需要WRITE_DAC权限。
    • 修改所有者 /setowner:需要WRITE_OWNER权限;icacls 不会强制夺取所有权;无法修改时需要配合takeown.exe
  3. 符号链接:默认操作目标文件;/L参数操作符号链接本身,不跟随指向对象。
  4. 域环境:域 SID 解析依赖域控制器;离线会显示 SID 字符串。

四、逻辑链路(核心子命令时序)

1. /save 备份

  1. 遍历路径(带/T递归子目录)
  2. 调用GetNamedSecurityInfo读取对象仅 DACL;丢弃 Owner/SACL/ 完整性标签
  3. 将路径、ACE、继承标志、权限掩码写入自定义文本 aclfile。

重要:SACL 审计、所有者、完整性标签不会备份进去

2. /restore 还原

  1. 读取 aclfile 文本;解析每一条记录的路径 + DACL。
  2. /substitute 先替换 SID;
  3. 调用SetNamedSecurityInfo把 DACL 写回对应 NTFS 对象;不碰所有者、SACL、完整性标签
  4. /T不生效,备份文件内部已经记录全部子项。

3. /setowner user 修改所有者

  1. 解析用户名→SID;
  2. 设置 SD 内 Owner 字段;

限制:不会强制夺取所有权;当前账号没有 WRITE_OWNER 会直接失败;需要先 takeown。

4. /grant[:r] Sid:perm

  • 不带:r:新增 / 叠加 ACE;原有显式允许 ACE 保留。
  • :r替换该 SID 全部原有显式允许 ACE,只保留本次授予的权限。
  • 构造 ACE,追加 DACL,icacls 自动重排 ACE 顺序。

5. /deny Sid:perm

新增显式拒绝 ACE;拒绝 ACE 优先级最高;同时清除该 SID 相同权限的允许 ACE。

6. /remove[:g|:d] Sid

  • 无后缀:删除该 SID全部 ACE(允许 + 拒绝)
  • :g 仅删除授予(允许 ACE)
  • :d 仅删除拒绝 ACE

7. /inheritance:e|d|r

  • e:启用继承;恢复从父对象继承 DACL。
  • d:禁用继承,把继承 ACE 复制为对象显式 ACE(GUI:禁用继承→复制权限)
  • r:禁用继承,完全删除全部继承 ACE(GUI:禁用继承→删除继承权限)

8. /reset

删除当前对象显式 DACL;完全使用父目录继承下来的 ACL。

9. /setintegritylevel

向 DACL 添加强制完整性 MIC ACE,控制低完整性进程访问。

通用参数

  • /T:递归本目录及全部子文件子文件夹执行操作
  • /C:遇到访问错误继续执行,输出错误,不中断整个批量任务
  • /L:作用于符号链接本身,不是链接指向目标
  • /Q:静默,关闭成功输出,只打印错误

五、配套链

系统配套工具

  1. takeown.exe:夺取对象所有者;icacls /setowner无法强制夺取,修改锁死文件 ACL 标准流程:takeown → icacls
  2. cacls.exe:旧版废弃工具;不支持完整性标签、继承控制、备份还原。
  3. 图形 UI:文件夹属性→安全→高级安全设置,底层 API 与 icacls 同源。

脚本配套

  1. PowerShell Get‑Acl / Set‑Acl:.NET 封装同一套 Win32 安全 API;适合复杂逻辑脚本。
  2. 备份恢复工作流:icacls /save备份 DACL;注意单独处理所有者、SACL 审计、完整性标签(icacls 不保存)。

完整标准运维流程(处理权限锁死文件夹)

::1.夺取所有者
takeown /f "D:\target" /r
::2.重置ACL继承
icacls "D:\target" /reset /t /c
::3.重新授权
icacls "D:\target" /grant Administrators:(F) SYSTEM:(F) /t

六、边界约束 & 坑点

边界分类 详细风险说明
备份边界 /save只存 DACL;所有者、SACL 审计策略、完整性标签不会保存;restore 也不会恢复,很多运维踩坑。
/setowner 边界 icacls 不能强制夺取所有权;权限不足直接报错,必须搭配 takeown。
继承坑 /inheritance:d复制继承 ACE 为显式;/inheritance:r直接删除继承 ACE,二者极易混淆。
SID 格式坑 数字 SID 必须前缀*,例如*S‑1‑1‑0;遗漏 * 会解析失败。
符号链接坑 默认跟随链接目标;修改链接本身权限必须指定/L
ACE 顺序坑 手动构造乱序 DACL,icacls 写入会自动重排;第三方工具生成乱序 ACL 可用/verify检测。
共享权限隔离 icacls 只操作NTFS 本地 ACL;不操作 SMB 共享权限;网络访问有效权限 = NTFS ∩ 共享权限。
拒绝 ACE 行为 /deny添加显式拒绝,拒绝优先级最高;不要滥用拒绝 ACE,排错困难。
/grant:r 作用域 :r只替换该 SID显式允许 ACE,不碰拒绝 ACE、继承 ACE。
FAT32/ExFAT 不支持 SD,所有 ACL 修改命令报错。

卡脖子痛点:

  1. 误以为/save完整备份全部安全属性,实际丢失所有者、SACL、完整性标签。
  2. 锁死文件夹直接用 icacls 改所有者,忘记 takeown,操作全部失败。
  3. 混淆/inheritance:d/inheritance:r,权限意外丢失。

七、自动化流水线(批处理 + PowerShell)

1. 批处理示例

::备份DACL
icacls "C:\MyData" /save acl_backup.txt /T /C /Q

::还原DACL
icacls "C:\" /restore acl_backup.txt /C /Q

::授予管理员完全控制,替换原有显式权限
icacls "C:\MyData" /grant:r Administrators:(F) /T /C

::禁用继承,复制继承ACE到本对象
icacls "C:\MyData" /inheritance:d

::删除Everyone所有ACE
icacls "C:\MyData" /remove Everyone /T /C

::设置中等完整性级别
icacls "C:\MyData" /setintegritylevel M /T

2. PowerShell 封装批量巡检脚本

$target = "C:\MyData"
#导出icacls文本报告
& icacls $target /T /C | Out‑File "acl_report.txt"

#检测不规范ACL
& icacls $target /verify /T /C

#结合takeown+icacls修复锁死目录
takeown /f $target /r /c
icacls $target /reset /t /c
icacls $target /grant Administrators:(F) SYSTEM:(F) /t /c

3. 注意:备份缺失项补充方案

icacls /save不备份 Owner/SACL;如需完整安全描述备份,使用 PowerShell Get‑Acl序列化,可完整保存 Owner/DACL/SACL。

#完整SD备份(包含所有者、DACL、SACL)
Get‑Acl "C:\MyData" -Audit | Export‑CliXml "Full_SD_Backup.xml"
#完整恢复
Import‑CliXml "Full_SD_Backup.xml" | Set‑Acl "C:\MyData"

在 PowerShell 中,icacls 命令通常对应于 Get-AclSet-AclAdd-AccessControlEntryRemove-AccessControlEntry 等命令。下面是 icacls 命令和 PowerShell 对应命令的对比:

功能 icacls 命令 PowerShell 对应命令
查看文件或文件夹的权限 icacls <文件路径> Get-Acl <文件路径>
授予用户权限 icacls <文件路径> /grant <用户>:<权限> Add-AccessControlEntry -Path <文件路径> -User <用户> -AccessType <权限>
撤销用户权限 icacls <文件路径> /remove <用户> Remove-AccessControlEntry -Path <文件路径> -User <用户>
修改权限 icacls <文件路径> /grant <用户>:<权限>  Set-Acl <文件路径> -AclObject (Get-Acl <文件路径>
备份权限 icacls <文件路径> /save <文件> /t  Get-Acl <文件路径>
恢复权限 icacls <文件路径> /restore <文件>  Import-Clixml -Path <文件>
删除指定文件夹的继承 icacls <文件路径> /inheritance:r Set-Acl <文件路径> -AclObject (Get-Acl <文件路径>
显示权限详细信息 icacls <文件路径> /T Get-Acl <文件路径>

说明:

  • Get-Acl:用于查看文件或文件夹的权限(类似于 icacls 的查看功能)。
  • Set-Acl:用于设置文件或文件夹的权限,可以结合 Add-AccessControlEntry 或 Remove-AccessControlEntry 来修改权限。
  • Add-AccessControlEntry:用于授予用户或组权限。
  • Remove-AccessControlEntry:用于删除用户或组的权限。
  • Export-Clixml 和 Import-Clixml:用于备份和恢复权限。
  • Remove-AccessControlInheritance:用于移除权限继承。

示例:

  1. 查看文件的权限icacls 对应 Get-Acl):

    powershellCopy Code
    icacls "C:\example\file.txt"

    对应的 PowerShell 命令:

    powershellCopy Code
    Get-Acl "C:\example\file.txt"
  2. 授予用户权限icacls 对应 Add-AccessControlEntry):

    powershellCopy Code
    icacls "C:\example\file.txt" /grant User:F

    对应的 PowerShell 命令:

    powershellCopy Code
    $acl = Get-Acl "C:\example\file.txt"
    $permission = "User", "FullControl", "Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    $acl.AddAccessRule($accessRule)
    Set-Acl "C:\example\file.txt" $acl
  3. 删除继承权限icacls 对应 Set-AclRemove-AccessControlInheritance):

    powershellCopy Code
    $acl = Get-Acl "C:\example\file.txt"
    $acl.SetAccessRuleProtection($true, $false)  # 禁用继承
    Set-Acl "C:\example\file.txt" $acl

使用 PowerShell 时,你可以更细粒度地控制文件和文件夹的权限,通过脚本化实现自动化管理。


caclsicacls 在版本上的差异对比:

特性 cacls icacls
可用操作系统版本 Windows XP及更早版本 Windows Vista及之后版本
功能定位 基本的文件和文件夹权限管理工具 高级的文件和文件夹权限管理工具,支持更多功能
命令格式 简单的命令格式 更复杂、更灵活的命令格式
权限类型支持 基本的权限类型,如 r (读取)、w (写入)、f (完全控制) 更细粒度的权限控制,包括 D (删除)、M (修改)等
继承权限管理 不支持继承权限管理 支持继承权限管理,可控制权限的继承关系
批量操作支持 不支持批量修改文件或文件夹权限 支持批量修改权限,可操作多个文件或文件夹
权限备份/恢复 不支持权限备份和恢复 支持权限的备份与恢复功能
命令的复杂性 简单,适合用于快速修改权限 更复杂,适用于需要精细控制权限的情况
支持的权限映射 不支持权限映射 支持权限映射,可以将权限从一个文件夹或文件传递到另一个
用户/组权限管理 基本支持用户和组权限设置 支持更细粒度的用户和组权限设置,包括详细的访问控制
命令行选项 选项较少,仅支持基本的权限操作 提供更多的命令选项,如 /grant/deny/setowner

总结:

  • cacls 是一个较老的工具,适用于旧版 Windows 操作系统,提供基本的权限管理功能,功能较为简单。
  • icacls 是新版工具,适用于 Windows Vista 及更高版本,提供了更强大的权限控制、更细粒度的管理以及更多的操作选项。

caclsicacls 都是用于管理 Windows 文件和文件夹权限的命令行工具,但它们有一些重要的差异。以下是它们之间的对比:

特性 cacls icacls
可用版本 旧版(Windows XP及更早版本) 新版(Windows Vista及之后版本)
功能 用于查看和修改文件和文件夹的权限 用于查看、修改、备份和恢复文件夹和文件的权限
权限类型 只支持简单权限,如 r (读取)、w (写入)、f (完全控制) 支持更复杂的权限控制,如 D (删除)、M (修改)等
支持继承权限 不支持继承权限的管理 支持继承权限设置,可以管理继承关系
权限备份/恢复 不支持权限备份和恢复 支持权限的备份和恢复功能
批量操作支持 不支持批量修改权限 支持批量修改权限,可以对多个文件/文件夹进行操作
支持的命令 cacls <文件/文件夹>cacls <文件/文件夹> /E /P <用户>:<权限> icacls <文件/文件夹>icacls <文件/文件夹> /grant <用户>:<权限> 等
修改权限方式 只能修改现有权限 可以修改现有权限,也可以删除、备份和恢复权限
权限映射支持 不支持权限映射 支持权限映射,允许通过使用不同的权限来修改文件夹
命令复杂度 命令较简单,适合基础权限操作 命令更复杂,但提供了更多的功能和灵活性
支持的用户组和用户 基本支持用户组和用户权限控制 支持更细粒度的用户和组控制,包括允许对用户/组进行详细的权限分配

总结:

  • cacls 是一个较旧且简单的工具,适合用于一些基础的权限管理,但不支持更复杂的权限配置与继承设置。
  • icacls 是一个功能更强大的工具,适用于较新的 Windows 系统,并且支持复杂的权限管理、权限备份与恢复以及批量操作等功能。

因此,如果您使用的是较新的操作系统,推荐使用 icacls,它提供了更灵活和强大的功能。


ICACLS 命令语法及功能

1. 保存权限到文件

cmd
复制
ICACLS 路径 /save 保存文件 [/T] [/C] [/L] [/Q]
  • 功能: 将指定路径下文件/文件夹的 DACL(自主访问控制列表)保存到文件中(不包含 SACL、所有者或完整性标签)。

  • 参数:

    • /T: 递归处理所有子目录和文件。

    • /C: 忽略错误继续操作。

    • /L: 操作符号链接本身(而非目标)。

    • /Q: 静默模式(不显示成功消息)。


2. 从文件恢复权限

cmd
复制
ICACLS 目录路径 [/substitute 旧SID 新SID [...]] /restore 保存文件 [/C] [/L] [/Q]
  • 功能: 将保存的 DACL 应用到指定目录下的文件。

  • 参数:

    • /substitute: 替换 SID(例如旧用户迁移到新用户)。

    • 其他参数同上。


3. 修改所有者

cmd
复制
ICACLS 路径 /setowner 用户 [/T] [/C] [/L] [/Q]
  • 功能: 修改指定路径下所有匹配项的所有者(不强制更改所有权,需使用 takeown.exe 强制修改)。

  • 参数: 同上。


4. 查找包含特定 SID 的 ACL

cmd
复制
ICACLS 路径 /findsid SID [/T] [/C] [/L] [/Q]
  • 功能: 查找所有包含显式提及指定 SID 的 ACL 的文件/文件夹。


5. 验证 ACL 规范性

cmd
复制
ICACLS 路径 /verify [/T] [/C] [/L] [/Q]
  • 功能: 检查 ACL 是否符合规范格式或 ACE 条目数量是否一致。


6. 重置为默认继承权限

cmd
复制
ICACLS 路径 /reset [/T] [/C] [/L] [/Q]
  • 功能: 将所有匹配项的 ACL 替换为默认继承权限。


7. 授予/拒绝/移除权限

cmd
复制
ICACLS 路径 [/grant[:r] SID:权限[...]]
       [/deny SID:权限 [...]]
       [/remove[:g|:d] SID[...]] [/T] [/C] [/L] [/Q]
       [/setintegritylevel 级别:策略[...]]
  • 功能: 直接修改权限或设置完整性级别。

  • 参数:

    • /grant[:r]:

      • :r 表示替换现有显式权限,否则追加权限。

      • 示例: /grant Administrator:(F) 授予管理员完全控制。

    • /deny: 显式拒绝指定权限(添加拒绝 ACE 并移除相同权限的允许 ACE)。

    • /remove[:g|:d]:

      • :g 移除所有允许权限,:d 移除所有拒绝权限。

    • /setintegritylevel:

      • 设置完整性级别(L低、M中、H高),可选继承标记 (OI)(CI)

      • 示例: /setintegritylevel (CI)(OI)L 对目录应用低完整性级别。


8. 继承设置

cmd
复制
/inheritance:e|d|r
  • 功能: 控制权限继承。

    • e: 启用继承。

    • d: 禁用继承并复制现有 ACE。

    • r: 删除所有继承的 ACE。


关键参数说明

  • SID 格式:

    • 可使用友好名称(如 Administrators)或数值形式(需以 * 开头,如 *S-1-5-32-544)。

  • 权限 (perm) 格式:

    • 简单权限F(完全控制)、M(修改)、RX(读执行)、D(删除)等。

    • 详细权限列表: 逗号分隔,如 (DE,WDAC) 表示删除和修改 DAC。

    • 继承标记: 如 (OI)(对象继承)、(CI)(容器继承)、(NP)(不传播继承)等。

  • ACE 排序规则:
    显式拒绝 → 显式允许 → 继承拒绝 → 继承允许。


示例

cmd
复制
icacls c:\windows\* /save AclFile /T
- 将 c:\windows 及其子目录下所有文件的 ACL 保存到 AclFile。

icacls c:\windows\ /restore AclFile
- 从 AclFile 恢复 c:\windows 及其子目录下文件的 ACL。

icacls file.txt /grant Administrator:(D,WDAC)
- 授予管理员对 file.txt 的删除和修改 DAC 权限。

icacls file.txt /grant *S-1-1-0:(D,WDAC)
- 授予 SID 为 S-1-1-0 的用户删除和修改 DAC 权限。

注意事项

  1. 管理员权限: 修改系统级路径需以管理员身份运行命令提示符。

  2. 备份 ACL: 操作前建议使用 /save 备份原始权限。

  3. 符号链接: 使用 /L 操作符号链接本身(默认操作目标)。

  4. 错误处理: 使用 /C 忽略错误并继续执行。

通过此命令,可精细控制 Windows 系统的文件和目录权限。


 

posted @ 2025-03-05 01:58  suv789  阅读(293)  评论(0)    收藏  举报