系统补丁与安全更新管理规范 🛡️
版本:1.0
适用范围:所有生产服务器(RHEL 9.x+、Rocky Linux 9、AlmaLinux 9、Debian Stable、Ubuntu LTS)
1. 核心原则
- 分环境分阶段:开发 → 预发布 → 生产,严禁跳过环境直接在生产应用
- 变更前备份:打补丁前必须创建系统快照或备份关键配置,并准备回滚方案
- CVE 优先修复:高危漏洞(CVSS ≥ 7.0 或 Red Hat 标记为 Critical / Important)优先处理
- 减少重启窗口:关键服务器优先启用 kernel live patching,降低业务中断时间
- 全程留痕:所有补丁操作须记录变更日志,保留至少 1 年,满足审计要求
2. 更新策略与变更窗口
| 环境 | 更新频率 | 更新内容 | 推荐变更窗口 | 重启处理 |
|---|---|---|---|---|
| 开发 / 测试 | 每周至少 1 次 | 所有可用更新(security + bugfix) | 工作日任意时间 | 允许随时重启 |
| 预发布 | 每月第 2 周 | 安全更新 + 重要 bugfix | 周二 / 周四 02:00–04:00 | 计划内重启 |
| 生产 | 每月第 3 周 | 仅安全更新 + 关键 bugfix | 周二 02:00–04:00 | 优先 live patch,必要时重启 |
高危漏洞例外处理
CVSS ≥ 9.0 或官方紧急公告的漏洞,必须在 72 小时内完成修复(或部署临时缓解措施并记录风险评估)。不受常规变更窗口限制。
3. 操作流程(RHEL 系)
3.1 变更前准备
# 创建 VMware 快照(或系统备份)
# 快照命名:RHEL9-Before-Patch-$(date +%F)
# 记录当前内核版本
uname -r
# 检查订阅与仓库状态
subscription-manager status
dnf repolist
3.2 检查可用更新
# 查看所有安全更新详情
dnf updateinfo list security
# 查看安全更新摘要
dnf updateinfo summary --security
# 查看所有可更新包
dnf check-update
3.3 应用安全更新
# 仅安装安全 + 重要 bugfix 更新(生产环境推荐方式)
dnf update --security --bugfix -y
# 检查是否需要重启(有服务使用了已更新的库)
needs-restarting -r
# 查看哪些服务需要重启
needs-restarting -s
3.4 完整更新(维护窗口执行)
# 全量更新所有包
dnf update -y
# 重启系统(内核更新后必须)
reboot
# 重启后验证
uname -r
systemctl list-units --state=failed
4. Kernel Live Patching(RHEL 9+)
Kernel live patching 允许在不重启系统的情况下修复内核漏洞,是减少生产业务中断的关键手段。
4.1 启用并安装
# 订阅 kpatch 相关仓库
subscription-manager repos \
--enable rhel-9-for-x86_64-baseos-rpms
# 安装 kpatch 工具
dnf install -y kpatch kpatch-dnf
4.2 管理 live patch
# 查看当前可用的 live patch 包
dnf list kpatch-patch*
# 安装所有可用 live patch
dnf install -y kpatch-patch-$(uname -r | tr - _)
# 查看已应用的 live patch 状态
kpatch list
# 检查所有 patch 是否激活
kpatch list --all
4.3 验证 live patch 生效
# 应该显示已激活的 patch
kpatch list
# 示例输出:
# Loaded patch modules:
# kpatch-patch-5_14_0-427_13_1_el9-1-1.x86_64 [enabled]
5. 操作流程(Debian / Ubuntu)
# 更新包索引
apt update
# 查看可用安全更新
apt list --upgradable 2>/dev/null | grep -i security
# 仅安装安全更新(unattended-upgrades)
apt install -y unattended-upgrades
unattended-upgrade -d
# 或手动安装所有更新
apt upgrade -y
# 检查是否需要重启
cat /var/run/reboot-required 2>/dev/null || echo "无需重启"
6. 变更记录要求
每次补丁操作后在 /opt/logs/patch/ 目录记录,文件命名:YYYYMM-patch.log
# /opt/logs/patch/202602-patch.log
========================================
Date: 2026-02-18 03:15
Environment: production
Hostname: linuxdc (192.168.1.100)
Operator: ops-team
========================================
Packages Updated:
kernel-5.14.0-427.13.1.el9_4.x86_64
openssl-3.0.7-24.el9_2.x86_64
openssh-8.7p1-38.el9_4.x86_64
CVE Fixed:
CVE-2025-XXXXX (Critical, CVSS 9.8) - OpenSSL heap overflow
Live Patch: Applied (no reboot required)
Post-patch Verification:
- systemctl list-units --state=failed: 0 units failed
- All business services: running normally
- kpatch list: 1 patch enabled
Result: SUCCESS
========================================
7. 回滚方案
7.1 dnf 事务回滚
# 查看补丁操作的事务 ID
dnf history
# 回滚指定事务
dnf history undo <ID>
7.2 内核版本回滚
# 查看已安装内核列表
rpm -qa | grep '^kernel-[0-9]' | sort
# 设置默认引导旧内核
grubby --set-default /boot/vmlinuz-<旧版本号>
grubby --default-kernel
# 重启生效
reboot
7.3 VMware 快照恢复
当补丁引发严重问题时,通过变更前创建的 VMware 快照直接恢复,是最彻底的回滚方式。
8. 自动化补丁管理(生产推荐)
生产环境补丁管理应逐步纳入自动化工具,实现分阶段、可审计的批量更新:
# Ansible Playbook 示例:批量应用安全更新
---
- name: 应用安全补丁
hosts: all
tasks:
- name: 仅安装安全更新
dnf:
update_only: yes
security: yes
state: latest
- name: 检查是否需要重启
command: needs-restarting -r
register: reboot_check
failed_when: false
changed_when: false
- name: 记录补丁结果
lineinfile:
path: /opt/logs/patch/ansible-patch.log
line: "{{ ansible_date_time.date }} {{ inventory_hostname }}: patch applied"
create: yes
9. 合规检查清单(每月自检 / 变更后必验)
- 订阅 / 仓库有效:
subscription-manager status或dnf repolist - 最近 30 天内无高危 CVE 未修复:
dnf updateinfo list security --available - Kernel live patch 已启用且为最新:
kpatch list - 补丁变更记录完整保存于
/opt/logs/patch/ - staging 环境已验证补丁稳定性(72 小时观察期)
- 回滚方案已测试可用