AccessChk是微软Sysinternals提供的命令行工具,用于直接读取并解析Windows对象(文件、服务、注册表等)的原始ACL数据,穿透继承与拒绝规则,精准输出有效权限及每条ACE详情,支持-v参数查看完整结构、-w筛选写权限、-s递归扫描、-n忽略继承,是权限审计与故障排查的核心工具。

要快速确认某个文件是否被错误地赋予了普通用户写权限,或验证管理员账户能否真正修改关键系统文件,必须跳过图形界面层层点击,直接用AccessChk命令行获取原始ACL数据——它不依赖资源管理器的缓存显示,也不受UAC虚拟化干扰。
检查单个文件的完整访问控制列表
以管理员身份打开命令提示符或PowerShell,执行:
accesschk.exe -v "C:\Windows\System32\drivers\etc\hosts"
该命令会输出该文件所有ACE(访问控制项)的详细结构:包括用户/组名、允许/拒绝标识、具体权限位(如READ_DATA、WRITE_DAC)、继承来源。-v参数是关键,没有它只会显示“ACCESS ALLOWED”或“ACCESS DENIED”的笼统结论,无法定位具体哪条规则导致放行或拦截。
若返回“Error: Object not found”,说明路径中存在中文空格或特殊字符未加引号,必须用英文双引号包裹全路径。
批量扫描目录下所有可写文件
方法一:递归检查指定目录内所有文件的写权限
accesschk.exe -d -w -s "D:\AppData" -q
-d表示目标为目录,-w仅筛选具有WRITE权限的条目,-s开启递归,-q关闭冗余提示信息。这一步会列出D:\AppData及其子目录中所有当前用户能写入的文件路径,结果可直接重定向到文本:> writable_files.txt
方法二:仅检查当前目录(不递归)且排除继承权限干扰
accesschk.exe -d -w "D:\AppData" -n
-n参数强制忽略从父目录继承的权限,只显示该目录自身ACL中显式设置的WRITE权限项。这对排查“为什么这个子目录突然能被写入”特别有效——往往问题就出在某次手动设置时勾选了“替换所有子对象权限”。
对比两个账户对同一文件的权限差异
第一步:导出当前用户权限快照
accesschk.exe -v "C:\Program Files\AppCore\config.xml" > user_perm.txt
第二步:切换到目标账户(如SERVICE账户)再执行相同命令
runas /user:NT AUTHORITY\SYSTEM "cmd /c accesschk.exe -v \"C:\Program Files\AppCore\config.xml\" > system_perm.txt"
第三步:用fc命令逐行比对
fc user_perm.txt system_perm.txt
注意:runas执行时需确保已启用对应账户的交互式登录权限,否则会报错“Logon failure: the user has not been granted the requested logon type at this computer”。【NT AUTHORITY\SYSTEM账户无需密码,但必须以管理员身份运行cmd】


















