当前位置:首页 > 百科

漏洞补丁下载目录对应的注册表不可写

组策略推送的漏洞漏洞补丁,下载目录指向了本机一个受控路径。补丁系统提示“目录不可写”,下载写补丁安装直接失败。目录我检查了权限,对应的注发现那个文件夹的册表ACL一切正常,管理员组完全控制,漏洞SYSTEM也有完全权限。补丁问题不在文件系统,下载写在注册表。目录

补丁下载目录的对应的注路径,写在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate下的册表某个键值里。组策略每次刷新时,漏洞会尝试把这个路径写回注册表。补丁可那台机器的下载写策略设置里,偏偏把“关闭注册表编辑工具”给启用了——不是禁止用户改,而是禁止任何进程对注册表进行写操作,包括系统服务自己。策略生效后,连SYSTEM都写不进去。补丁引擎启动时读取了下载目录,想更新状态,结果一写就报错。

这种冲突很隐蔽。表面上你看到的是“目录不可写”,实际是注册表项被策略锁死。我遇到过一台域控,补丁一直装不上,排查了三天,最后发现是安全基线模板里多加了一条“拒绝Everyone对注册表项的写权限”,偏偏那条路径就是Windows Update的存储键。把基线模板里那条删掉,重新gpupdate /force,补丁立刻能装了。

还有一种情况更恶心。注册表项的权限没问题,但父键被重定向了。比如32位补丁程序跑在64位系统上,访问HKLM\SOFTWARE\会被自动映射到Wow6432Node。如果组策略里手动创建了一个同名键在非重定向路径下,而补丁程序偏偏走了重定向路径,两边不一致,写入就失败。这种问题光看日志根本看不出来,得用Process Monitor实时抓注册表操作,看它到底在哪个键上失败。

别急着给用户重装系统。先检查HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate下有没有残留的WUServer或DownloadDirectory键值。这些策略键一旦被组策略写入,即使后来组策略删了,注册表里的值也不会自动清除。下次补丁引擎启动,读到这个残留的路径,去写一个根本不存在的目录,报错方式跟“不可写”一模一样。

微软官方文档通常建议你直接改注册表权限,把Everyone加进去。我不建议这么干。把整个WindowsUpdate键放开给Everyone,等于让任何本地进程都能篡改补丁下载来源——恶意软件最喜欢这种入口。更稳的做法是找到组策略里对应的设置项,把“配置自动更新”里的下载目录改成空,或者干脆删掉那条策略GPO,让注册表值恢复默认。

最后一招,也是最实在的:用regini命令批量重置键权限。写个脚本,把HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate的权限重置为“管理员完全控制,SYSTEM完全控制,Users只读”。执行完重启Windows Update服务,再触发一次补丁扫描。多数情况下,问题就消失了。要是还不行,那大概率不是注册表的事,回头查磁盘空间和DNS解析吧——补丁下载失败的原因,永远比你想象的更朴素。

分享到: