該文檔會詳細介紹補丁管理的工作原理,以及如何掃描系統上的補丁狀態,安裝缺失的補丁等。
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的系統補丁修複更新。