全盘NTFS权限自动化巡检需分层聚焦:先锁定高风险路径(如C:\Windows、C:\Users*\Documents等),再检查关键权限配置,最后用AccessChk验证实际访问能力;脚本须以管理员身份运行并启用审核策略。
要对全盘 ntfs 权限做自动化安全巡检,核心不是“一键扫完整个c盘”,而是分层、聚焦、可验证:先锁定高风险路径,再检查关键权限配置,最后用真实操作确认是否真能访问。脚本必须在管理员上下文中运行,且需提前配置审核策略才能捕获变更行为。
明确巡检范围与高危目标
全盘扫描效率低、日志爆炸、结果难解读。应优先覆盖以下路径:
- 系统关键目录:C:\Windows、C:\Windows\System32、C:\Program Files、C:\Program Files (x86)
- 用户数据敏感区:C:\Users\*\Documents、C:\Users\*\Desktop、C:\Users\*\AppData\Roaming
- 权限易失控位置:C:\Temp、C:\Scripts、共享文件夹根目录(如 D:\Shared)
- NTFS特殊对象:C:\System Volume Information、C:\hiberfil.sys(需提权+绕过保护)
用PowerShell脚本分层采集权限信息
以下命令组合可在管理员 PowerShell 中直接运行,输出结构化结果供分析:
- 查指定路径的显式权限(不含继承):
Get-Acl "C:\Windows" | Select-Object -ExpandProperty Access | Where-Object {$_.IsInherited -eq $false} - 查所有子目录中含“Everyone”或“Authenticated Users”的完全控制项:
Get-ChildItem "C:\" -Directory -Recurse -ErrorAction SilentlyContinue | ForEach-Object { $acl = Get-Acl $_.FullName -ErrorAction SilentlyContinue; $acl.Access | Where-Object { ($_.IdentityReference -match 'Everyone|Authenticated Users') -and $_.FileSystemRights -match 'FullControl' } | Select-Object @{n='Path';e={$_.PSPath}}, IdentityReference, FileSystemRights } - 导出全盘顶级目录权限快照(轻量级):
Get-ChildItem C:\ -Directory | ForEach-Object { [PSCustomObject]@{ Path = $_.FullName; Owner = (Get-Acl $_.FullName).Owner; Permissions = (Get-Acl $_.FullName).Access | ForEach-Object { "$($_.IdentityReference):$($_.FileSystemRights)" } -join ';' } } | Export-Csv C:\Reports\ntfs_top_level_acl.csv -NoTypeInformation
结合AccessChk做快速权限有效性验证
PowerShell读ACL只是看“写了什么”,AccessChk能验证“实际能不能用”。将微软官方工具 accesschk.exe(Sysinternals套件)集成进脚本:
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
- 检查某用户能否真正进入敏感目录:
accesschk.exe -d -q "DOMAIN\Administrator" "C:\Windows\System32"(返回“ACCESS ALLOWED”才可信) - 批量检查多个路径是否对特定组开放写权限:
for /f "usebackq delims=" %i in (`type paths.txt`) do @accesschk.exe -w -q "BUILTIN\Users" "%i" 2>&1 | findstr "ALLOWED" - 发现异常时自动记录:
accesschk.exe -d -s "Everyone" "C:\Temp" 2>&1 | Out-File -Append C:\Reports\access_risk.log
触发式日志审计与变更告警
权限本身不记日志,但你可以让系统主动记——前提是提前启用审核策略:
- 用组策略启用“文件系统”审核(成功+失败),并为 C:\、C:\Windows 等路径手动添加“更改权限”审核项
- 脚本定期提取最近24小时的安全日志中 Event ID 4670(权限变更):
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4670;StartTime=(Get-Date).AddHours(-24)} -ErrorAction SilentlyContinue | ForEach-Object { [PSCustomObject]@{ Time = $_.TimeCreated; User = $_.Properties[1].Value; Path = $_.Properties[6].Value; OldACL = $_.Properties[7].Value; NewACL = $_.Properties[8].Value } } | Export-Csv C:\Reports\acl_changes.csv -NoTypeInformation - 若发现非授权账户修改了关键路径ACL,脚本可自动发邮件或写入事件日志(ID 9999)标记高危事件
不复杂但容易忽略:脚本必须以本地 SYSTEM 或域管理员身份运行;所有路径用绝对路径;输出日志需带时间戳和主机名;首次部署前务必在测试机验证权限采集逻辑是否被UAC或Windows资源保护拦截。

















