該文檔會詳細介紹補丁管理的工作原理,以及如何掃描系統上的補丁狀態,安裝缺失的補丁等。
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/24.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 系統補丁更新原理
在Windows操作系統上,補丁管理會檢查到Windows實例中Windows Update自動更新相關配置說明可用更新列表,查找適用于系統版本的補丁更新信息。
當掃描或安裝補丁更新時,補丁管理會自動剔除已被其補丁列表中的后續更新取代的更新。因此,補丁管理只顯示最新更新,以供您安裝。例如,如果KB4556846替換KB4550961,僅限KB4556846作為補丁更新。
當補丁更新包之間存在依賴關系時,需要優先安裝依賴的更新,然后才可正常檢測并安裝目標更新。 例如,如果補丁KB5005076的安裝依賴補丁KB4566425,掃描時若補丁KB4566425未安裝則檢測不到補丁KB5005076, 需要安裝補丁KB4566425后才可以檢測并安裝補丁KB5005076。
注意:補丁管理目前僅支持Server2012R2、Server2016、Server2019、Server2022的系統補丁修復更新。