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

12 使用者空間即時修補

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

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

使用者空間即時修補 (ULP) 是指將修補程式套用至執行中程序所用程式庫而不中斷該程序的過程。使用做為 libpulp 一部分的 ulp 工具來執行即時修補操作。

libpulp 是可實現使用者空間即時修補的架構。它由 libpulp.so 程式庫和用於使程式庫可即時修補以及套用線上修補程式的工具 (ulp 二進位檔案) 組成。

12.1.1 先決條件

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

  • 若要使程式庫可即時修補,必須使用 -fpatchable-function-entry GCC 旗標編譯程式庫。不需要變更程式庫原始碼。

  • 程序必須預先載入 libpulp.so 程式庫。

12.1.2 使用 libpulp

若要對應用程式使用 libpulp,必須執行以下步驟:

  1. 使程式庫可即時修補。

  2. 啟動應用程式時,使用以下指令預先載入 libpulpLD_PRELOAD=/usr/lib64/libpulp.so ./APPLICATION

12.1.2.1 準備可即時修補的程式庫

為了使程式庫能夠即時修補,它必須在所有函數呼叫中包含 NOP 序言。GCC 版本 8 及更新版本以及 SUSE Linux Enterprise Server 隨附的 GCC 版本專門為此提供了 -fpatchable-function-entry。因此,在 AMD64/Intel 64 架構上,使用 -fpatchable-function-entry=16,14 旗標編譯一個以 C 撰寫的程式庫就足以使該程式庫可即時修補。

Glibc、libssl.so.1.1 和 libcrypto.so.1.1 程式庫原本就可在 SUSE Linux Enterprise 15 SP4 上即時修補。

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

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

ulp livepatchable LIBRARY

12.1.2.3 套用線上修補程式

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

ulp trigger -p PID LIVEPATCH.ulp

在此範例中,PID 是執行中程序的 PID,該程序使用的程式庫要進行修補,LIVEPATCH.ulp 是實際的線上修補程式檔案。

live patching succeeded 訊息表示即時修補操作成功。

12.1.2.4 回復即時修補程式

ulp trigger 可用於回復即時修補程式。可以透過兩種方式回復即時修補程式。您可以透過套用相應的 .rev 修補程式來回復即時修補程式:

ulp trigger -p PID LIVEPATCH.rev

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

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

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

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

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

12.2 更多資訊

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