跳转至

系统补丁与安全更新管理规范 🛡️

版本: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 statusdnf repolist
  • 最近 30 天内无高危 CVE 未修复:dnf updateinfo list security --available
  • Kernel live patch 已启用且为最新:kpatch list
  • 补丁变更记录完整保存于 /opt/logs/patch/
  • staging 环境已验证补丁稳定性(72 小时观察期)
  • 回滚方案已测试可用