总体结论
在受管制的运维流程下,使用 Yum 更新软件包总体是安全的:它会对所有仓库与包进行 GPG 签名校验、自动解决 依赖关系,并提供只更新安全补丁的选项。但在生产环境直接执行 yum update -y(无筛选地升级“所有软件包”,且自动确认)存在引入不兼容变更、服务中断、远程会话中断等风险,尤其是涉及 内核 升级时往往需要重启,远程执行更需谨慎。因此,建议遵循“先评估、后更新、可回滚”的原则。
主要风险点
- 兼容性与回归风险:全量升级可能带来依赖版本变化、行为变更或配置不兼容,导致应用异常。实际事故中,执行 yum update -y 后 Docker 升级引发容器未自动拉起,造成业务中断。
- 内核更新与远程会话:全量升级通常会包含 内核,需要重启才能生效;在 SSH 远程环境直接执行,可能因网络中断或重启导致失联。
- 依赖解析与“跳过问题包”:复杂依赖可能触发冲突;使用 –skip-broken 强行跳过会留下不稳定状态,应避免。
- 仓库与镜像源风险:若启用不可信或低质量仓库,可能引入质量或安全问题;应仅使用可信仓库并管理好 /etc/yum.repos.d/ 配置。
更安全的做法
- 先评估再行动:执行 yum check-update 查看可更新列表;必要时先在测试环境验证。
- 优先只打安全补丁:使用 yum update --security 仅应用安全修复;若希望最小化变更,可用 yum update-minimal --security,它倾向于只升级到包含安全修复的最低必要版本(例如仅把内核升级到安全修复版,而不引入额外功能更新)。
- 避免无筛选的全量自动升级:生产环境慎用 yum update -y;尽量按需更新(如 yum update 包名),减少意外变更。
- 控制变更范围:对关键组件使用 versionlock 插件锁定版本,防止被意外升级;必要时排除特定包。
- 变更窗口与回滚准备:选择维护窗口,提前备份重要数据与配置,更新后重启相关服务并做健康检查,确保业务恢复。
实用命令清单
| 目的 |
命令示例 |
说明 |
| 查看可更新 |
yum check-update |
列出可更新的包,便于评估影响 |
| 仅安全更新 |
yum update --security |
只应用安全修复 |
| 最小化安全更新 |
yum update-minimal --security |
在安全修复前提下尽量减少变更 |
| 指定包更新 |
yum update nginx |
降低波及面 |
| 仅下载不安装 |
yum install --downloadonly --downloaddir=/opt/rpms 包名 |
先离线审查或用于内网环境 |
| 版本锁定 |
安装并启用 versionlock 插件后执行 yum versionlock add 包名 |
防止关键包被升级 |
| 列出与启用仓库 |
yum repolist all |
检查仓库可用性与优先级,确保来源可信 |