笔者前几篇反反复复地说了好多,网络安全运维也好,信息化运维也好,高效的真正内涵在于提高质量,还说做运维要懂脚本开发。可能很多读者看到一半心里面就开始吐槽:
我有这开发能力我直接去当程序员了,还干这鸟运维。
既然渔不容易掌握,那起码先把鱼弄到手再说。
笔者:国际认证信息系统审计师、软考系统分析师、软件工程硕士
于是依然是 WSUS 的优化这个话题,今天介绍一个开源项目:
https://github.com/awarre/Optimize-WsusServer
以及什么是笔者认为的高质量的拿来主义。对 WSUS 不感兴趣的读者可以从本文的第5部分开始。?
其实时至今日,大部分信息化运维需要执行的日常工作,都不是新事物。基本上可以肯定,在运维时碰到要处理的问题,极大概率是已经有人碰到过,且已经有了解决方法。
所以,作为高效高质的运维人员,完全不应急于自己动手从零开始,而是要善于发现已有和能用且安全可靠的工具。
Optimize-WsusServer 这个开源项目可能知道的人并不多,在 GITHUB 上只有317星,但这是个非常实用的 WSUS 运维功能集成工具。
该项目100%用 PowerShell 编写,基于 MIT 许可证发布,可以实现对 WSUS 服务器进行清理、优化、维护和配置等方面的操作。
具体地,有如下特性:
1、按产品名称和更新名称中的关键字进行搜索和删除更新。这个操作在 WSUS 控制台也能做,但通过该工具执行可以节省大量界面刷新时间,效率更高。
2、禁用驱动程序的同步和缓存、删除 WSUS 补丁更新缓存中已经下载的驱动程序。
话说这驱动程序更新是 WSUS 的一个巨大的减分项,但凡在下载分类中勾选过驱动程序的系统管理员都会很后悔,包括笔者在内。
因为这个分类结合自动审批,会导致下载非常大量(且无用)的驱动程序:总数量是各种硬件型号乘以多种系统版本再乘以CPU体系数量。
所以项目的 README 中特别指出了这个功能特性可以极大地提升速度、可靠性和减少需要占用的存储空间。
3、可以配置和校验 IIS 的设置。笔者在之前一篇《高质运维: WSUS 补丁更新服务器优化措施》中强调了 WSUS 的优化必须包括 IIS。所以这个工具也实现了。
4、调用 WSUS 内置的更新和计算机清理功能。
5、整合了微软 WSUS 最佳实践给出的 WSUS 数据库优化和索引重整。
6、一步创建 WSUS 每天和每周优化的计划任务。
由于工具是用 PowerShell 实现的脚本,所以使用上有少许前置依赖:
服务器需要安装 PowerShell,版本要是6而不是7,因为 WSUS 模块还没有面向 7 的版本;
因为需要操作 WID 数据库,所以需要安装 PowerShell 的 SQLServer 模块;
因为需要操作和配置 IIS,所以需要安装 IIS 管理模块,不过 2012 R2之后都已经默认安装了。
脚本工具不用安装,从项目页面下载 Optimize-WsusServer.ps1 或直接 GIT CLONE,然后把脚本放在服务器上比如 C:\USERS 之下,又或者某个管理员用户目录之下,最后通过设置用户权限隔离用户文件夹、设置脚本文件安全访问属性等方式来限制脚本仅能被系统管理员使用。
使用时要注意的是要用 POWERSHELL 环境而不是传统的 CMD 环境去执行。
首次执行时,可以通过 -FirstRun 参数完成全套优化执行。脚本会给出优化操作的提示,系统管理员简单地输入 Y/N 就可以执行对应的优化操作。
不过,如果使用环境是 Windows Server 2022 和 Windows Internal Database,那就要先修改脚本文件,在第440行和第?444行的末尾,加上:“ -Encrypt Optional”的运行参数,也就是改为?如下的样子:
# 440
Invoke-Sqlcmd -query $createCustomIndexesSQLQuery -ServerInstance $serverInstance -QueryTimeout 120 -Encrypt Optional
# 444
Invoke-Sqlcmd -query $wsusDBMaintenanceSQLQuery -ServerInstance $serverInstance -QueryTimeout 40000 -Encrypt Optional
修改的原因是 Windows Server 2022 使用的 Windows Internal Database 版本实际是 SQL Server 2014 的嵌入版,不支持加密连接,所以 Invoke-Sqlcmd 命令需要补上?可选加密的参数。
另外,在GITHUB上有较新的分叉:
https://github.com/philrandal/Optimize-WsusServer
补充了这个参数。
主要使用参数包括:
1、禁用驱动程序
Optimize-WsusServer.ps1 -DisableDrivers
禁用设备驱动程序同步和缓冲。
2、深度清理
Optimize-WsusServer.ps1 -DeepClean
对所有的分类进行搜索,找出不需要的更新和驱动程序进行释放,同时改善数据库响应速度。在执行删除前会提示用户确认。
3、检查配置
Optimize-WsusServer.ps1 -CheckConfig
按建议的配置设置检查当前 WSUS 的 IIS 配置。目的是防止 WSUS /IIS/SQL 服务崩溃和非常常见的“重置服务器节点”错误信息。这个在笔者之前的文章里面介绍过了。
4、优化服务器
Optimize-WsusServer.ps1 -OptimizeServer
运行所有 WSUS 内置的由微软设计的清理过程,从而省了进去 WSUS 控制台的过程。
5、优化数据库
Optimize-WsusServer.ps1 -OptimizeDatabase
按微软的建议运行数据库表索引重整的脚本。
6、安装每日计划任务
Optimize-WsusServer.ps1 -InstallDailyTask
自动创建计划任务,每天晚上执行 OptimizeServer 优化服务器的功能。
7、安装每周计划任务
Optimize-WsusServer.ps1 -InstallWeeklyTask
自动创建计划任务,每周一次自动运行优化数据库的功能。
本文到此结束......不是。
首先是回到本文的标题。笔者的拿来主义是要有质量的。
优化 WSUS 的 PowerShell 脚本,网上其实并不少。但都是碎片化的,包括文章在内,这篇的脚本解决这个问题,那篇的脚本解决那个问题,大部分还不如笔者写的《高质运维:WSUS 补丁更新服务器优化措施》所解决的问题多。
整合在一起的就已经少,更不用说能符合笔者定义的高质量运维要求了。
所以,笔者这一篇介绍的 Optimize-WsusServer,就属于相对高质量的优化 WSUS 服务器的功能整合脚本工具。
当然可改进的空间还有,按笔者在《高质运维:需要运维脚本软件的开发能力》中的描述,有必要对该脚本进行补充比如日志输出的重定向之类,有能力的读者可以自行进行项目分叉、尝试改进以及提交 pull request 回去给原项目。
还没完。?
作为全面关注从软件工程到网络安全再到信息化运维其实就是 DevSecOps 的公众号作者,写啥都会捎带上网络安全。
代码开源了就必然可信吗?
那么多供应链攻击的实例,以及攻防演练红蓝对抗中的相互钓鱼,都说明了开源并不等于安全。所以,使用脚本之前,要能验证这个脚本是安全的。
所谓不会开发但会找,就包括了在不具备开发能力的情况下如何验证找回来的东西是安全的。
验证方法估计读者都会想到了,用 AI。
比如笔者在 Visual Studio Code 添加 AI 插件 Copilot 或者通义灵码(也可以是自建的本地大语言模型环境比如 TabbyML、Ollama),然后打开脚本,选中代码,让它进行分析。
以下用通义灵码作简单举例,实际中的分析过程要复杂很多:
在通义灵码完成分析后,追问一句“这个脚本有无危险性”这样的问题,它就会对其中可能导致产生安全问题的代码给出进一步的分析。
挺实用的,是吧。
只不过,AI也并不能100%信任,因为难保代码里面藏有让 AI 中毒的提示词。所以最终还是应该回到自己是否具备开发能力上来,要实现 DevSecOps,开发能力就是不可缺的。
注:题头图用豆包生成。
本站微信订阅号:
本页网址二维码: