补丁管理原理介绍

该文档会详细介绍补丁管理的工作原理,以及如何扫描系统上的补丁状态,安装缺失的补丁等。

Linux

补丁管理支持的Linux系统包括 CentOS/Alibaba Cloud Linux/Debian/Ubuntu 等,不同OS使用不同的包管理工具,具体如下,不同包管理工具扫描、安装系统补丁的原理不同。

OS

包管理工具

CentOS 7、Alibaba Cloud Linux 2、Red Hat Enterprise Linux 7

yum

CentOS Stream 9、Alibaba Cloud Linux 3、Red Hat Enterprise Linux 8/9、Anolis 8、AlmaLinux 8/9、Rocky Linux 8/9、Fedora 37/38/39

dnf

Ubuntu 16.04/18.04/20.04/22.04

apt

Debian 11/12

apt

sles 12、15/opensuse 15

zypper

补丁基线在yum/dnf 上的工作原理

CentOS、Alibaba Cloud Linux、Red Hat Enterprise Linux、Anolis等系统使用 yum/dnf 来管理软件包,两个软件包管理都有更新通知的概念,在软件仓库中存储着名为updateinfo.xml的文件来存储软件的更新通知,更新通知只是修复特定问题的软件包的集合。更新通知中的软件包均被视为均为安全性软件包,如果您将“是否包括非安全更新”设置为“否”,patch manager会要求可升级的新版本包在更新通知中。

updateinfo中的字段说明:

名称

描述

type

表示更新通知的类型,包括:

Security

Bugfix

Enhancement

Recommended

Newpackage

title

更新通知的标题

severity

更新通知的严重类型,包括:

Critical

Important

Moderate

Low

Unspecified

summary

更新通知的简要描述

description

更新通知的详细描述

references

有关更新通知参考信息,可能包含 CVE、Bugzilla等信息

pkglist

该更新通知相关联的rpm包列表

补丁管理根据updateinfo中的更新通知按照补丁基线的规则进行过滤。以CentOS的公共基线为例,规则如下:

'PatchFilterGroup': [
    {
        'Values': [
            '*'
        ],
        'Key': 'Product'
    },
    {
        'Values': [
            'Security',
            'Bugfix'
        ],
        'Key':'Classification'
    },
    {
        'Values': [
            'Critical',
            'Important'
        ],
        'Key': 'Severity'
    }
]

即为只扫描/安装类型为 Security和Bugfix,严重等级为Critical和Important的相关更新包,此工作流等效于yum命令如下:

yum check-update --security --bugfix --secseverity=Critical,Important

等效于dnf命令如下:

dnf  check-update --security --bugfix --secseverity=Critical
dnf  check-update --security --bugfix --secseverity=Important

在用户创建的自定义基线中,不选择过滤补丁类型及严重程度时,等效的 yum及dnf命令如下:

yum check-update --security
dnf check-update --security

对于筛选出需要安装的补丁包,补丁管理使用yum(update api) /dnf update 安装补丁包,安装了补丁包后,补丁管理会重启实例,当您选择的重启选项为 "不重启时" 则不会重启。

注意:Alibaba Cloud Linux 2 支持安装内核热补丁,当您的实例开启了热补丁功能,补丁管理如果只是安装了内核热补丁,不会重启实例。 关于更多 Alibaba cloud linux 2 内核热补丁信息请参考:内核热补丁概述

补丁基线在apt上的工作原理

在Debian、Ubuntu系统上,补丁基线通过过滤deb包的Priority, Section属性来决定选择哪些补丁,Priority表示包的优先级,用来表示包的重要性,Section 属性用来表示包的分类。

补丁管理的扫描/安装系统补丁的流程如下:

1 执行 apt update 刷新软件源仓库包列表

2 使用补丁基线匹配过滤可升级包,如果您将“是否包括非安全更新”设置为“否”,patch manager会要求可升级的新版本包在 security源中。以下是各系统中的security仓库源名称

Debian Server 8: debian-security jessie
Debian Server 9: debian-security stretch
Debian Server 10: debian-security buster
Debian Server 11: debian-security bullseye
Debian Server 12: debian-security bookworm
Ubuntu Server 16.04 LTS: xenial-security
Ubuntu Server 18.04 LTS: bionic-security
Ubuntu Server 20.04 LTS: focal-security
Ubuntu Server 22.04 LTS: jammy-security

Debian及Ubuntu的公共基线,默认选择优先级为Required和Important的包:

'PatchFilterGroup': [
    {
        'Values': [
            '*'
        ],
        'Key': 'Product'
    },
    {
        'Values': [
            'Required',
            'Important'
        ],
        'Key': 'Severity'
}

此工作流等效于执行以下步骤:

1 执行apt list --upgradable 命令列出所有可升级的包

2 使用apt list -a package-name 获取该包的所有可升级的版本(版本号排序由高到低,高版本优先)

3 使用apt show package-name=={版本} ,检查该包的可升级版本的优先级,是否符合基线规则

4 检查符合基线规则的版本的包是否在 security 源

对于筛选出需要待安装的补丁包,补丁管理使用apt update api 安装补丁包,安装了补丁包后,补丁管理会重启实例,当您选择的重启选项为 "不重启" 时则不会重启。

补丁基线在zypper上的工作原理

在sles/opensuse系统上, zypper 通过 patch 来管理系统补丁,您可以通过zypper list-patches来获取适用于系统的补丁,补丁是修复一组特定软件包的集合,它有以下属性:

status

not needed 不需要

applied 已安装

need 需要安装

Category

补丁的类型

  • security:安全补丁,修复安全漏洞和漏洞。

  • recommended:推荐补丁,提供对系统性能、功能或兼容性的改进。

  • optional:可选补丁,提供额外的功能或修复非关键问题。

  • feature: 功能性补丁,增加新的操作或改进现有的功能

  • document:(文档)

  • yast: YaST是openSUSE和SUSE Linux发行版中的一个系统管理工具

Severity

补丁的安全等级

  • low:低级别的问题或风险。

  • moderate:中等级别的问题或风险。

  • important:重要级别的问题或风险。

  • critical:临界级别的问题或风险。

  • unspecified: 未定义的

Created On

该补丁创建的具体日期

zypper的补丁基线通过控制补丁的类型和严重性来过滤需要安装的补丁:

"PatchFilterGroup": [
    {
        "Values": [
            "*"
        ],
        "Key": "Product"
    },
    {
        "Values": [
            "security",
            "recommended"
        ],
        "Key": "Classification"
    },
    {
        "Values": [
            "Critical",
            "Important",
            "Moderate"
        ],
        "Key": "Severity"
    }
],

将补丁中的类型为security和recommended,严重级别为Critical,Important,Moderate的包过滤出来,过滤出来的即为符合基线规则的补丁包。

Windows

Windows 系统补丁更新原理

在Windows操作系统上,补丁管理会检查到Windows实例中Windows Update自动更新相关配置说明可用更新列表,查找适用于系统版本的补丁更新信息。

当扫描或安装补丁更新时,补丁管理会自动剔除已被其补丁列表中的后续更新取代的更新。因此,补丁管理只显示最新更新,以供您安装。例如,如果KB4556846替换KB4550961,仅限KB4556846作为补丁更新。

当补丁更新包之间存在依赖关系时,需要优先安装依赖的更新,然后才可正常检测并安装目标更新。 例如,如果补丁KB5005076的安装依赖补丁KB4566425,扫描时若补丁KB4566425未安装则检测不到补丁KB5005076, 需要安装补丁KB4566425后才可以检测并安装补丁KB5005076。

注意:补丁管理目前仅支持Server2012R2、Server2016、Server2019、Server2022的系统补丁修复更新。