8 使用 KLP 的即時核心修補 #
本文件介紹核心即時修補 (KLP) 技術的基本原理,並提供 SLE Live Patching 服務的使用指導方針。
KLP 讓您無需重新開機便可套用 Linux 核心的最新安全性更新。如此可最大程度地提高系統運作時間和可用性,這對於任務關鍵性系統而言尤為重要。
本文件中提供的資訊與 AMD64/Intel 64、POWER 和 IBM Z 架構相關。Xen 監管程式支援 KLP。
8.1 核心即時修補的優勢 #
KLP 提供了多項優勢。
對於需獲得或維護特定合規認證的組織而言,確保大量伺服器自動保持最新狀態至關重要。KLP 可在協助實現合規的同時,減少對費用高昂的維護期間的需求。
簽訂了服務等級合約的公司必須保證其系統可用性和運作時間達到特定的等級。即時修補可在不產生停機時間的情況下修補系統。
由於 KLP 是標準系統更新機制的一部分,因此無需專門培訓或引入複雜的維護常式。
8.2 核心即時修補綜覽 #
透過內含已修改代碼的套件提供核心即時修補程式,此類套件與主核心套件不同。即時修補程式具有累積性,因此最新的修補程式包含核心套件先前修補程式的所有修復。每個核心即時套件都與為其發佈的確切核心修正版關聯。每新增一個修復,即時修補程式套件版本號碼都會相應增加。
即時修補程式僅包含關鍵修復,不會取代常規的核心更新,後者需要系統重新開機。可以將即時修補程式視為在執行適當的核心更新和重新開機前用於暫時保護核心的措施。
下圖闡述了即時修補程式與核心更新之間的總體關係。使用 klp -v patches
指令可以檢視目前作用中即時修補程式所解決的 CVE 清單和缺陷報告。
您可以安裝多個版本的核心套件及其即時修補程式。這些套件不會衝突。您可以為執行中核心安裝更新的核心套件及即時修補程式。在此情況下,您可能會收到將系統重新開機的提示。訂閱了 SLE Live Patching 的使用者有權獲享技術支援,只要執行中核心存在即時修補程式更新 (請參閱第 8.5.1 節 「檢查即時修補程式的過期日期」)。
啟用 KLP 後,每個核心更新都會隨附即時修補程式套件。此即時修補程式不包含任何修復,而是做為相應核心未來即時修補程式的種子。這些空種子修補程式稱為初始修補程式
。
8.2.1 核心即時修補範圍 #
SLE Live Patching 的修補範圍包括 SUSE 通用弱點評分系統 (CVSS;SUSE CVSS 基於 CVSS v3.0 系統開發) 7 級以上系統穩定或資料損毀相關的弱點和錯誤修復。但從技術上而言,為屬於指定類別的所有修復都建立即時修補程式可能並不現實。因此,SUSE 保留在因技術原因而無法建立核心即時修補程式的情況下跳過相應修復的權利。目前超過 95% 的合格修復都是以即時修補程式的形式發行的。如需 CVSS (SUSE CVSS 評分基礎) 的詳細資訊,請參閱 Common Vulnerability Scoring System SIG。
8.2.2 核心即時修補限制 #
KLP 涉及取代功能和妥善處理互相依存的功能集的取代。透過將舊代碼呼叫重新導向至不同記憶體位置的更新代碼來完成此操作。資料結構的變更使情況變得更加複雜,因為資料會保持原狀,無法延伸或重新解譯。儘管使用某些技術可以間接變更資料結構,但有些修復無法轉換為即時修補程式。在此情況下,只能透過系統重新啟動來套用修復。
8.3 使用 YaST 啟用核心即時修補 #
若要在您的系統上啟用 KLP,您需要擁有作用中 SLES 和 SLE Live Patching 訂閱。請造訪 SUSE Customer Center 以檢查您的訂閱的狀態,並獲取 SLE Live Patching 訂閱的註冊代碼。
若要在您的系統上啟用核心即時修補,請執行以下步驟:
執行
yast2 registration
指令並按一下 。在可用延伸清單中選取
,然後按 。確認授權條款並按
。輸入您的 SLE Live Patching 註冊代碼並按一下
。檢查
和所選的 。系統應該會自動選擇安裝Live Patching
和SLE Live Patching Lifecycle Data
模式,以及一些其他套件以滿足相依關係。按一下
完成安裝。這樣將會在您的系統上安裝基礎核心即時修補元件、初始即時修補程式,以及所需的相依項。
8.4 從指令行啟用核心即時修補 #
若要啟用核心即時修補,您需要擁有作用中 SLES 和 SLE Live Patching 訂閱。請造訪 SUSE Customer Center 以檢查您的訂閱的狀態,並獲取 SLES Live Patching 訂閱的註冊代碼。
執行
sudo SUSEConnect --list-extensions
。請記住 SLES Live Patching 的確切啟用指令。範例指令輸出 (縮略版):$ SUSEConnect --list-extensions ... SUSE Linux Enterprise Live Patching 15 SP3 x86_64 Activate with: SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r ADDITIONAL REGCODE
使用獲得的指令後接
-r LIVE_PATCHING_REGISTRATION_CODE
以啟用 SLES Live Patching,例如:SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r LIVE_PATCHING_REGISTRATION_CODE
使用
zypper install -t pattern lp_sles
指令安裝所需的套件和相依項。
至此,系統已完成即時修補。
幕後作業的程序如下:當套件安裝系統偵測到某個安裝的核心可以即時修補,並且軟體通道中存在相應的即時修補程式時,系統會選擇安裝該即時修補程式。然後核心會在套件安裝過程中接收到即時修補程式修復。在產品安裝完成前,就會對核心進行即時修補。
8.5 執行核心即時修補 #
在常規的系統更新過程中安裝核心即時修補程式。但您應瞭解以下幾點事項。
如果已為執行中核心安裝 kernel-livepatch-* 套件,系統會對核心進行即時修補。您可以使用
zypper se --details kernel-livepatch-*
指令來檢查您的系統上安裝了哪些核心即時修補程式套件。如果安裝了 kernel-default 套件,更新管理員會提示您將系統重新開機。為避免此訊息顯示,您可以將核心更新從修補操作中濾除。可以透過使用 Zypper 新增套件鎖定來實現此目的。SUSE Manager 還可讓您過濾通道內容 (請參閱使用 SUSE Manager 進行即時修補)。
您可以使用
klp status
指令檢查修補狀態。若要檢查安裝的修補程式,請執行klp -v patches
指令。請記住,雖然系統上可能會安裝多個核心套件,但任何時間只有一個套件在執行。同樣,雖然系統上可能會安裝多個即時修補程式套件,但只有一個即時修補程式會載入到核心中。
initrd
中會包含作用中即時修補程式。這表示如果發生了未預期的重新開機,系統啟動時會套用即時修補程式修復,因此不需要再次執行修補。
8.5.1 檢查即時修補程式的過期日期 #
請確認
lifecycle-data-sle-module-live-patching 已安裝,然後執行 zypper lifecycle
指令。在輸出的 Package end of support if different from product
區段中應該可以看到即時修補程式的過期日期。
每個即時修補程式自基礎核心套件發行起一年內都會收到更新。您可以使用維護的核心、修補程式更新和生命週期頁面,依據執行中核心版本來檢查過期日期,而無需安裝產品延伸。
8.6 核心即時修補問題疑難排解 #
8.6.1 手動降級修補程式 #
如果您發現最新的即時修補程式有問題,可以將目前安裝的即時修補程式降級回之前的版本。我們建議在系統開始顯現出問題前執行修補程式降級。請注意,在系統記錄中追蹤核心警告或核心錯誤的系統可能不適合使用修補程式降級程序。如果您不確定系統是否符合修補程式降級的要求,請聯絡 SUSE 技術支援部門以獲得協助。
使用
klp -v patches
指令確定執行中即時修補程式。以RPM:
開頭的行中顯示的就是目前的執行中修補程式。例如:RPM: kernel-livepatch-5_3_18-24_29-default-2-2.1.x86_64
上例中的
5_3_18-24_29-default
指的就是執行中核心版本。使用
zypper search -s kernel-livepatch-RUNNING_KERNEL_VERSION-default
指令搜尋修補程式的先前版本。該指令會傳回可用套件版本清單。請注意,每個新即時修補程式套件發行版本的版本號碼會加 1。請務必選擇版本號碼低於目前版本號碼的發行版本。使用
zypper in --oldpackage kernel-livepatch-RUNNING_KERNEL_VERSION-default=DESIRED_VERSION
指令安裝所需的版本。