系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

icacls

查看和修改 NTFS 权限(DACL),支持继承与批量备份恢复。

补充说明

icacls 显示或修改文件、目录的自由访问控制列表(DACL),替代已弃用的 cacls。它支持授予和拒绝权限、移除 ACE、设置所有者、控制继承,以及用 /save//restore 批量保存和恢复 ACL。常用权限简写为 F 完全控制、M 修改、RX 读取和执行、R 只读、W 只写、D 删除;目录常用 (OI)(CI) 让文件和子目录继承。

边界:icacls 只管 NTFS 的 DACL,不管共享权限、所有者(用 takeown 或 /setowner)以及加密。attrib 的只读/隐藏也不是权限。显式拒绝(/deny)优先于允许,且会移除同一 SID 的相同显式允许项。/t 会作用于整棵树,/reset 会把 ACL 重置为继承值,二者叠加很容易把管理员或服务账号锁在门外。

Windows Vista/Server 2008 起内置,Windows 10/11 与 Server 2016+ 语法基本一致,但输出和账号名随系统语言本地化。PowerShell 中建议用 Get-Acl/Set-Acl 做程序化处理;icacls 是外部程序,在 PowerShell 中仍可调用。

影响范围 / 先备份 / 如何回滚:/t、/reset、/inheritancelevel:r、/deny 会影响目标目录及全部子项,可能让用户、服务甚至管理员失去访问。执行前先 icacls 目录 /save 备份文件 /t /c 保存 DACL,并在小目录上验证恢复流程;回滚用同一基准目录下的 /restore 备份文件,若已被锁在门外,用管理员 CMD 先 takeown 再 /grant 临时恢复,确认后再恢复原 ACL。

常用示例

# 1. 查看目录当前的 DACL 和继承状态
C:\> icacls C:\data

# 2. 授予域用户对目录及子项的修改权限
C:\> icacls C:\data /grant "DOMAIN\user:(OI)(CI)M" /T

# 3. 替换该用户原有的显式允许项,只保留读和执行
C:\> icacls C:\data /grant:r "DOMAIN\user:(OI)(CI)RX" /T

# 4. 移除某用户的全部显式 ACE
C:\> icacls C:\data /remove "DOMAIN\user" /T

# 5. 显式拒绝写权限,注意拒绝优先于允许
C:\> icacls C:\data /deny "DOMAIN\user:(W)" /T

# 6. 断开继承并移除继承来的 ACE,只保留显式权限
C:\> icacls C:\data /inheritancelevel:r

# 7. 批量保存 ACL 到文件,再在相同基准目录恢复
C:\> icacls C:\data\* /save C:\backup\data-acl.txt /T /C
C:\> icacls C:\data\ /restore C:\backup\data-acl.txt /C

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. /grant 和 /grant:r 的区别是什么?
  2. 显式拒绝和允许冲突时哪个优先?怎样移除拒绝项?
  3. 执行 /reset /t 前应该做哪两件事?
答案
  1. 不加 :r 是追加显式允许,:r 会替换该 SID 原有的显式允许。
  2. 拒绝优先;用 /remove:d 移除拒绝项,而不是再授予允许。
  3. 先用 /save 备份 ACL,并在小目录上验证恢复流程。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令