服务器软件包安全更新指南
在运行着 Nginx 和 PHP 等生产项目的服务器上进行系统更新时,目标是最小化停机时间(Downtime)和业务影响。
要实现最小化影响,您需要遵循一套系统的 “检查 - 更新 - 验证 - 重启” 流程。
🚀 最小化影响的更新流程
| 步骤 | 操作目标 | 涉及的命令/工具 | 影响最小化策略 |
|---|---|---|---|
| 1. 诊断 | 确定更新的紧迫性、内容和影响。 | dnf / yum updateinfo list security | 避免不必要的全量更新。 |
| 2. 预清理 | 确保软件包管理器的环境干净。 | dnf clean all 或 yum clean all | 预防事务失败 (如您之前遇到的错误)。 |
| 3. 更新 | 只安装核心的安全补丁。 | dnf upgrade-minimal --security 或 yum update --security | 仅修复安全漏洞,保持现有软件包的稳定版本。 |
| 4. 检查 | 确定是否需要重启整个系统。 | sudo needs-restarting -r / sudo needs-restarting -s | 避免不必要的服务器重启。 |
| 5. 维护 | 计划并执行必要的重启操作。 | sudo reboot 或 sudo systemctl restart 服务名 | 确保在业务低谷期执行中断性操作。 |
| 6. 验证 | 确认服务恢复正常。 | curl / 浏览器访问 / systemctl status | 快速确认业务完整性。 |
详细操作步骤(以 DNF 为例)
1. 🔍 诊断与预清理
在开始之前,确保没有任何残留的事务锁定(防止出现 Transaction failed)。
检查安全更新列表(不安装):
Bash
# 适用于基于 RHEL/Alinux 的系统 sudo dnf updateinfo list security清理软件包管理器缓存:
Bash
sudo dnf clean all # 如果您之前有事务失败,建议执行重建 RPM 数据库 sudo rpm --rebuilddb
2. 🛡️ 执行最小化安全更新
执行最小化更新,专注于安全补丁。
Bash
# 执行最小化安全更新
sudo dnf upgrade-minimal --security
3. ✅ 检查重启需求(最关键步骤)
这是决定是否需要停机的核心步骤。
检查是否需要重启整个系统 (
-rfor reboot):Bash
sudo needs-restarting -r- 如果返回
Reboot is required(通常是更新了kernel或glibc):转到 步骤 4,必须重启。 - 如果未返回任何内容:通常不需要重启系统。
- 如果返回
检查是否需要重启服务 (
-sfor service):Bash
sudo needs-restarting -s这个命令会列出所有需要重启的正在运行的服务(例如
nginx,php-fpm,sshd等),因为它们依赖的库文件被更新了。
4. ⏰ 计划维护与执行重启
根据 步骤 3 的检查结果采取不同的策略:
策略 A: 需要系统重启(最高影响)
影响: 网站将中断,直到服务器重新启动并服务启动。
行动: 必须在业务低谷期(例如深夜、周末)执行。
通知相关人员。
执行重启:
Bash
sudo reboot
策略 B: 只需要服务重启(较低影响)
影响: 网站可能只有极短暂的连接中断(取决于您的 Nginx/PHP-FPM 配置)。
行动: 只需要重启被列出的关键服务。
重启 Nginx:
Bash
sudo systemctl restart nginx重启 PHP-FPM(如果您的项目使用 FPM):
Bash
sudo systemctl restart php-fpm
5. 🌐 验证服务
重启机器或服务后,立即验证您的 Nginx 和 PHP 应用程序是否正常工作。
检查服务状态:
Bash
sudo systemctl status nginx sudo systemctl status php-fpm浏览器访问:打开您的网站,访问关键页面,确保功能完整性。
日志检查:检查 Nginx 和 PHP 的错误日志,确认没有新的运行时错误。
建议: 鉴于您之前遇到了核心库的更新,即使系统没有强制要求,在业务允许的情况下进行系统重启是确保所有安全补丁完全生效的最彻底方法。
附录:DNF 安装操作步骤(针对 CentOS/RHEL 7)
如果您的 Linux 系统没有预装 dnf,并且它是基于 Red Hat 系列的发行版(如 CentOS 7、RHEL 7),您可以通过其默认的软件包管理器 yum 来进行安装。
1. 检查 DNF 是否已安装
首先,运行以下命令确认您的系统上是否确实没有 dnf:
Bash
which dnf
- 如果返回
/usr/bin/dnf或类似路径,说明dnf已经存在。 - 如果返回
which: no dnf in (...),则说明dnf没有安装。
2. 使用 YUM 安装 DNF 软件包
在 CentOS 7 或 RHEL 7 上,dnf 是作为一个普通的软件包存在于官方仓库中的。您可以使用 yum 来安装它:
Bash
sudo yum install dnf
3. 安装完成后验证
安装完成后,再次运行 which 命令确认安装成功:
Bash
which dnf
如果成功,您应该会看到 /usr/bin/dnf 或类似路径,此时您就可以开始使用 dnf 命令来管理软件包了。
💡 注意事项
- 系统兼容性: 这个方法主要适用于 CentOS 7 或 RHEL 7。在这些系统中,
yum和dnf可以同时存在。 - 新系统: 如果您使用的是 CentOS 8/9、RHEL 8/9 或 Alinux 3,则
dnf已经是默认的软件包管理器,无需安装。这些系统中的yum命令实际上只是dnf的一个软链接或别名,目的是保持向后兼容性。 - 安装耗时:
dnf软件包很小,通常会很快完成安装。

