该文档会详细介绍补丁管理的工作原理,以及如何扫描系统上的补丁状态,安装缺失的补丁等。
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 补丁的类型 |
|
Severity 补丁的安全等级 |
|
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 系统补丁更新原理
当扫描或安装补丁更新时,补丁管理会自动剔除已被其补丁列表中的后续更新取代的更新。因此,补丁管理只显示最新更新,以供您安装。例如,如果KB4556846替换KB4550961,仅限KB4556846作为补丁更新。
当补丁更新包之间存在依赖关系时,需要优先安装依赖的更新,然后才可正常检测并安装目标更新。 例如,如果补丁KB5005076的安装依赖补丁KB4566425,扫描时若补丁KB4566425未安装则检测不到补丁KB5005076, 需要安装补丁KB4566425后才可以检测并安装补丁KB5005076。
注意:补丁管理目前仅支持Server2012R2、Server2016、Server2019、Server2022的系统补丁修复更新。