跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 管理指南 / 一般任務 / 使用者空間即時修補
適用範圍 SUSE Linux Enterprise Server 15 SP5

12 使用者空間即時修補

本章介紹使用者空間即時修補的基本原理和用法。

12.1 關於使用者空間即時修補

使用者空間即時修補 (ULP) 是指在不中斷執行中程序的情況下,將修補程式套用至該程序所用程式庫的過程。每次以即時修補程式的形式提供安全性修正程式時,在套用即時修補程式後,客戶服務的安全性即會得到保障,而無需重新啟動相關程序。

使用做為 libpulp 一部分的 ulp 工具來執行即時修補操作。libpulp 是一個由 libpulp.so 程式庫和 ulp 二進位檔案組成的架構。該二進位檔案用於使程式庫可即時修補,以及套用即時修補程式。

提示
提示

您可以透過 sudo 機制,以一般使用者或特權使用者身分執行 ulp 指令。區別在於透過 sudo 執行 ulp,您可以檢視 root 所執行程序或修補程序的資訊。

12.1.1 先決條件

若要使 ULP 正常運作,必須符合兩個要求。

  • 執行以下指令在系統上安裝 ULP:

    > sudo zypper in libpulp0 libpulp-tools
  • 必須在載入 libpulp.so.0 程式庫之前啟動具有所需即時修補支援的應用程式。請參閱 第 12.1.3 節 「使用 libpulp,以取得詳細資料。

12.1.2 受支援的程式庫

目前,僅支援 glibcopenssl (openssl1_1)。其他套件將在它們準備好即時修補後可用。若要接收 glibcopenssl 即時修補程式,請安裝 glibc-livepatchesopenssl-livepatches 套件:

> zypper install glibc-livepatches openssl-livepatches

12.1.3 使用 libpulp

若要實現對某個應用程式的即時修補,您需要在啟動該應用程式時預先載入 libpulp.so.0 程式庫:

> LD_PRELOAD=/usr/lib64/libpulp.so.0 APPLICATION_CMD

12.1.3.1 檢查程式庫是否可即時修補

若要檢查程式庫是否可即時修補,請使用以下指令:

> ulp livepatchable PATH_TO_LIBRARY

12.1.3.2 檢查 .so 檔案是否為即時修補程式容器

如果共用物件 (.so) 包含內嵌於其中的 ULP 修補程式描述,則表示其為即時修補程式容器。您可以使用以下指令驗證它:

> readelf -S SHARED_OBJECT | grep .ulp

如果輸出顯示共用物件中有 .ulp.ulp.rev 區段,則表示其為即時修補程式容器。

12.1.3.3 套用即時修補程式

可以使用 ulp trigger 指令套用即時修補程式,例如:

> ulp trigger -p PID LIVEPATCH.so

以使用要修補之程式庫的執行中程序的程序 ID 取代 PID,以實際的即時修補程式檔案取代 LIVEPATCH.so。該指令會傳回以下狀態訊息之一:

SUCCESS

即時修補操作成功完成。

SKIPPED

已跳過該修補程式,因為它不適用於程序中載入的任何程式庫。

ERROR

發生錯誤,您可以檢查 libpulp 內部訊息緩衝區,以取得更多資訊。如需詳細資訊,請參閱第 12.1.3.6 節 「檢視內部訊息佇列」

您也可以使用萬用字元來套用多個即時修補程式,例如:

> ulp trigger '*.so'

該指令會嘗試將目前資料夾中的每個修補程式套用至已載入 libpulp 程式庫的每個程序。如果修補程式不適合該程序,則會自動跳過該修補程式。最後,該工具會顯示它成功將多少個修補程式套用至多少個程序。

12.1.3.4 還原即時修補程式

您可以使用 ulp trigger 指令還原即時修補程式。可以透過兩種方式還原即時修補程式。您可以使用 --revert 參數傳遞即時修補程式容器,來還原即時修補程式:

> ulp trigger -p PID --revert LIVEPATCH.so

或者,您也可以移除與特定程式庫關聯的所有修補程式,例如:

> ulp trigger -p PID --revert-all=LIBRARY

在該範例中,LIBRARY 指的是實際的程式庫,例如 libcrypto.so.1.1

當原始即時修補程式的原始碼不可用時,後一種方法可能很有用。或者,您希望在目標應用程式仍在執行安全代碼時,移除特定的舊修補程式並套用新修補程式,例如:

> ulp trigger -p PID  --revert-all=libcrypto.so.1.1 new_livepatch2.so

12.1.3.5 檢視套用的修補程式

您可以執行以下指令來驗證已為哪些應用程式套用即時修補程式:

> ulp patches

輸出會顯示可即時修補的程式庫和程式中載入的修補程式,以及修補程式解決的錯誤:

PID: 10636, name: test
  Livepatchable libraries:
    in /lib64/libc.so.6:
      livepatch: libc_livepatch1.so
        bug labels: jsc#SLE-0000
    in /usr/lib64/libpulp.so.0:

您還可以查看即時修補程式修補的功能:

> ulp dump LIVEPATCH.so

12.1.3.6 檢視內部訊息佇列

來自 libpulp.so 的記錄訊息儲存在程式庫內的緩衝區中,除非使用者提出要求,否則它們不會顯示。若要顯示這些訊息,請執行:

> ulp messages -p PID

12.2 更多資訊

專案的 Git repository 中提供了有關 libpulp 的更多資訊。