首页/系统/Windows 运维速查/权限备份与还原(icacls /save /restore)

权限备份与还原(icacls /save /restore)

批量改权限前先备份 ACL:icacls /save 导出,/restore 还原;或 Get-Acl 序列化为文件供审计比对。

Windows 运维速查系统更新于 2026-10-13

为什么改权限前要先备份

权限是隐式配置:改错之后很难凭记忆复原,而且往往在几天后才以「某个部门访问不了」的形式暴露。icacls 的 /save 把目录树的权限条目导出成文本清单,/restore 可以整体还原,是批量改权限前的标准动作。除了还原,这份清单本身也是审计证据——定期导出并与基线比对,能发现权限漂移,而不是等出事再回头翻记录。

基本信息

适用平台Windows Vista 及以后(含 10/11、Server),CMD 与 PowerShell 均可调用
导出icacls <目录> /save 备份文件.txt /T /C
还原icacls <目录> /restore 备份文件.txt /C
参数含义/T 递归子目录与文件、/C 遇到错误继续处理
路径要点备份文件中记录的是相对路径,还原要在与备份相同的位置执行
权限要求导出需要读取 ACL,还原需要 SeRestorePrivilege(通常以管理员身份运行)

典型使用场景

  • 批量改权限前留底:给某个组追加权限之前先导出,出问题立即回滚
  • 迁移前后比对:源与目标各导一份,逐条核对是否一致
  • 权限漂移审计:按季度导出清单并与基线对比,找出异常放开的条目
  • 事故恢复:误删权限条目导致业务中断时,用清单快速还原
  • 交付留档:项目验收时提供权限清单,作为配置交付的一部分

常用示例

常用示例
:: 导出:递归保存 D:\Share 的权限条目
icacls D:\Share /save D:\acl\share_20261013.txt /T /C
:: 查看备份文件前几行确认内容
REM type D:\acl\share_20261013.txt
:: 还原:建议在与备份时相同的父目录下执行
cd /d D:\
icacls D:\Share /restore D:\acl\share_20261013.txt /C
:: 单对象的结构化留档(PowerShell)
REM Get-Acl D:\Share | Export-Clixml D:\acl\share_20261013.xml
REM Get-Acl D:\Share | Format-List Owner, Group, AccessToString | Out-File D:\acl\share_readable.txt
:: 迁移场景:保留权限复制到目标
REM robocopy D:\Share E:\Share /E /COPYALL /R:2 /W:2 /XJ /NP /LOG:D:\acl\robocopy.log

几种留档方式对照

方式能恢复的内容适用场景
icacls /save + /restore目录树上的 DACL 条目批量改权限前后留底与整体回滚
Get-Acl + Export-Clixml单个对象的 ACL 对象精细核对与脚本化比对
Format-List 文本导出所有者、组与权限文本审计报告与人工审阅
robocopy /COPYALL迁移时复制权限与所有者信息跨卷或跨服务器迁移
卷影副本或系统备份文件与权限整体灾难恢复,粒度较粗
icacls /save 导出的是访问控制条目(DACL),不含所有者信息。所有权需要单独记录(Get-Acl 的 Owner 字段或 icacls 输出),恢复时用 icacls /setowner 或 takeown 单独处理。
还原时若报「系统找不到指定的文件」或执行完毫无变化,多数是执行位置不对:备份文件中是相对路径,还原必须在与备份时一致的目录层级下运行。

还原与比对

还原与比对
icacls D:\Share /restore D:\acl\share_20261013.txt /C        # 还原(在与备份相同的位置执行)
# 用 Clixml 结构化备份做还原
$acl = Import-Clixml D:\acl\share_20261013.xml
Set-Acl -Path D:\Share -AclObject $acl
# 还原后抽查几层目录,确认条目已回来
icacls D:\Share\Dept | Select-String -Pattern 'OPS|Deny|拒绝'
# 与基线比对:导出当前状态再逐条对照
icacls D:\Share /save D:\acl\share_now.txt /T /C
备份文件本身就是敏感资料:它把目录结构与账户权限关系完整暴露出来。导出后应按内部资料要求保存与限制访问,不要随手放在共享目录里。

易错点

  • 还原时不在备份时所在的目录层级执行:相对路径无法对应,命令显示成功但权限没有变化
  • 跨服务器还原不经核对:目标机上账户 SID 不存在时条目无法解析,权限出现空洞,需先确认账户存在
  • 以为备份包含了所有者:icacls /save 只保存 DACL,所有权要单独记录与还原
  • 备份文件放在共享目录且权限过宽:等于把全目录的权限结构公开,属资料泄露
  • 只备份不验证:备份是否完整、能否还原应做一次还原演练,否则关键时刻才发现不可用

数据来源与参考

  • Microsoft Learn:icacls /save /restore
  • Microsoft Learn:Get-Acl

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌