补丁管理原理介绍

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

Linux

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

OS

包管理工具

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

yum

CentOS 8、Alibaba Cloud Linux 3、Red Hat Enterprise Linux 8、Anolis 8

dnf

Ubuntu 16.04/18.04/20.04

apt

Debian 8/9/10/11

apt

补丁基线在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
Ubuntu Server 16.04 LTS: xenial-security
Ubuntu Server 18.04 LTS: bionic-security
Ubuntu Server 20.04 LTS: focal-security

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

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

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

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

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

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

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

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

Windows

Windows 系统补丁更新原理

在Windows操作系统上,补丁管理会检查到阿里云wsus(Windows Server Update Services)可用更新列表,查找适用于系统版本的补丁更新信息。

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

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

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