返回

2025/03/25

4. 你有沒有用過 Ksplice?

在這篇文章中,我們將介紹 Oracle Linux 的一項功能——Ksplice。Ksplice 是一種即時修補系統,允許你在不重新啟動作業系統的情況下為核心應用修補程式。它已有超過十年的歷史,是目前無與倫比的出色功能。然而,即使在使用 Oracle Linux 的人群中,使用 Ksplice 的人可能也屬少數。因此,本文旨在加深你對 Ksplice 的理解。

什麼是 Ksplice?

Ksplice 是一項功能,允許你在不重新啟動作業系統的情況下為 Linux 核心和一些用戶空間庫應用修補程式。例如,如果你安裝了一個新發布的核心,你仍需重新啟動作業系統才能啟用它。然而,Ksplice 讓你無需重新啟動即可啟用最新更新。

換句話說,使用 Ksplice 可以獲得以下好處:

  • 最小化系統停機時間
  • 快速應對安全漏洞
  • 減少修補程式應用時間

無需重新啟動即可啟用更新的能力在「外部可存取的伺服器」和「運行多個虛擬機器的 KVM 主機」中尤為重要。外部可存取的伺服器需要快速應對安全漏洞。此外,KVM 主機上運行多個虛擬伺服器。因此,當需要重新啟動作業系統時,必須進行各種預先調整,還需要實際的工作時間。

換句話說,Ksplice 是一項在企業使用中特別有效的功能,有助於降低運營成本並增強安全性。

Ksplice 常見問題解答

為了幫助你快速了解 Ksplice,我們將以 Ksplice 常見問題解答的形式提供概述。

Ksplice 可以用於哪些作業系統?

截至目前(2022 年 9 月),支援以下 Linux 作業系統。Ksplice 同時支援 Oracle Linux 的 Red Hat 相容核心和 Unbreakable Enterprise 核心。

  • Oracle Linux 6
  • Oracle Linux 7
  • Oracle Linux 8
  • Oracle Linux 9
  • CentOS 和 RHEL 7
  • CentOS 和 RHEL 8
  • Ubuntu 18.04
  • Ubuntu 20.04

除了 Intel/AMD (x86_64) 外,它還支援 64 位 Arm。然而,對於 Arm,它僅支援 Unbreakable Enterprise 核心。

使用 Ksplice 需要網路連線嗎?

Ksplice 有線上和離線模式。線上模式連接到 Oracle 提供的 Unbreakable Linux Network (ULN),因此你需要能夠連接到網際網路(可能是通過網際網路代理)。

此外,在離線模式下,你可以通過設置 Ksplice 鏡像在不連接到網際網路的情況下使用 Ksplice。然而,用作 Ksplice 鏡像的伺服器必須能夠連接到網際網路。

Ksplice 的即時修補涵蓋哪些組件?

除了以下兩個核心外,它還支援用戶空間套件 glibc 和 openssl。然而,只有 Oracle Linux 支援用戶空間套件。

  • Red Hat 相容核心
  • Unbreakable Enterprise 核心
  • glibc
  • openssl

使用 Ksplice 需要付費嗎?

要使用 Ksplice,你需要簽訂付費的 Oracle Linux Premier Support 合約。然而,在 Oracle Cloud Infrastructure 上的 Oracle Linux 上,Ksplice 是免費提供的(預設設置)。例外的是,你可以在 Ubuntu 上免費使用它。

Ksplice 有試用計劃嗎?

提供為期 30 天的試用計劃。此外,如果想輕鬆試用 Ksplice,我們推薦 Oracle Cloud Infrastructure 的 Always Free。Oracle Linux 映像已預設設置 Ksplice,因此你可以立即使用。

有沒有像 Ksplice 這樣的其他即時修補系統?

其他 Linux 發行版也有以下即時修補系統。然而,它們都是近年來才提供的,尚未證明其效能。

  • 基於 RHEL 的 Linux kpatch
  • SUSE KLP
  • Ubuntu Livepatch Service

此外,在 Windows 上,有一個名為 Windows 熱修補的功能。然而,它僅限於 Windows Server 2022 Datacenter: Azure Edition。

讓我們試用 Ksplice

要理解 Ksplice,最好看看它實際如何運作。在本文中,我們將使用易於試用的 Oracle Cloud Infrastructure 的 Oracle Linux 8 進行解釋。設置和細節將在下一篇文章中說明。

此外,Oracle Linux 7 和 Oracle Linux 9 幾乎相同,但根據你使用的映像版本可能會略有差異。

檢查你的 Ksplice 設置狀態

要使用 Ksplice,你需要 Ksplice 客戶端。因此,檢查是否已安裝 Ksplice 客戶端。如果搜索套件,你會發現已安裝 uptrack 套件(= Ksplice 客戶端)。

$ rpm -qa | grep -e ksplice -e uptrack | sort
ksplice-release-el8-1.0-4.el8.x86_64
ksplice-uptrack-release-1-5.noarch
uptrack-1.2.75-0.el8.noarch

接下來,檢查配置文件 /etc/uptrack/uptrack.conf。如果配置文件存在且已配置存取密鑰,你就可以使用 Ksplice。

$ grep -v -e '^\s*#' -e '^\s*$' /etc/uptrack/uptrack.conf
[Auth]
accesskey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(從 ULN 獲取 Ksplice Uptrack 的密鑰)
[Network]
https_proxy =
gconf_proxy_lookup = no
[Settings]
install_on_reboot = yes
autoinstall = no

學習 Ksplice 的基礎知識

既然你知道 Ksplice 已設置好,我們將實際使用 Ksplice。由於大多數操作需要 root 權限,我們將使用 su。或者,你可以每次都加上 sudo

$ sudo su -

檢查核心版本

檢查當前啟用的 Linux 核心版本。UEK6 “5.4.17-2136.306.1.3” 已啟用。

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

如果你檢查儲存庫的最新版本,它是 “5.4.17-2136.310.7.1”。因此,你可以看到已發布新版本。

# yum check-update kernel-uek
kernel-uek.x86_64              5.4.17-2136.310.7.1.el8uek              ol8_UEKR6

查看更新

在傳統方法中,核心更新和重新啟動如下進行:

# yum update kernel-uek -y
# reboot

在 Ksplice 中,使用 uptrack-upgrade 命令。你可以通過輸入 “uptrack-upgrade -n” 查看適用的 Ksplice 更新,如下所示。每行是一個單獨的更新。

# uptrack-upgrade -n
Effective kernel version is 5.4.17-2136.306.1.3.el8uek
The following steps will be taken:
Install [n9kprcm6] Known exploit detection.
Install [qivpmdlu] Known exploit detection for CVE-2019-9213.
Install [50qj7qw1] Known exploit detection for CVE-2017-1000253.
Install [3iw8b16t] Known exploit detection for CVE-2016-5195.
Install [sgxyx32m] Known exploit detection for CVE-2021-27363.
Install [92k7sosn] Known exploit detection for CVE-2021-27364.
★以下省略

應用更新

應用所有這些更新。應用時間根據更新數量和機器規格而異,這次大約花了 1 分鐘。這裡需要注意的關鍵點是最後一行中的 “5.4.17-2136.310.7”。由於 Ksplice,它與最新版本的核心版本相同。

# uptrack-upgrade -y
The following steps will be taken:
Install [n9kprcm6] Known exploit detection.
Install [qivpmdlu] Known exploit detection for CVE-2019-9213.
Install [50qj7qw1] Known exploit detection for CVE-2017-1000253.
Install [3iw8b16t] Known exploit detection for CVE-2016-5195.
★省略
Installing [dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Your kernel is fully up to date.
Effective kernel version is 5.4.17-2136.310.7.el8uek

通過 Ksplice 更新啟用的有效核心版本可以使用 uptrack-uname 命令查看。

# uptrack-uname -r
5.4.17-2136.310.7.el8uek.x86_64

普通的 uname 顯示已安裝的核心版本。

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

已安裝的 UEK 列表如下。最新的 “5.4.17-2136.310.7” 未安裝。換句話說,只安裝了增量的 Ksplice 更新(修補程式)。

# rpm -q kernel-uek | sort -n
kernel-uek-5.4.17-2102.201.3.el8uek.x86_64
kernel-uek-5.4.17-2136.304.4.1.el8uek.x86_64
kernel-uek-5.4.17-2136.306.1.3.el8uek.x86_64

查看更新

你正在應用的 Ksplice 更新可以使用 uptrack-show 命令查看。

# uptrack-show
Installed updates:
[n9kprcm6] Known exploit detection.
[qivpmdlu] Known exploit detection for CVE-2019-9213.
[50qj7qw1] Known exploit detection for CVE-2017-1000253.
★省略
[fza3q2mo] CVE-2022-2153: Denial-of-service in Kernel-based Virtual Machine.
[4eaq3lov] CVE-2022-21505: Lockdown bypass in Integrity Measurement Architecture.
[dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Effective kernel version is 5.4.17-2136.310.7.el8uek

刪除更新

你可以使用 uptrack-remove 命令輕鬆刪除已應用的更新。

# uptrack-remove --all -y
The following steps will be taken:
Remove [dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Remove [4eaq3lov] CVE-2022-21505: Lockdown bypass in Integrity Measurement Architecture.
Remove [jjafy1ef] CVE-2022-29582: Use-after-free in asynchronous io_uring API.
★省略
Removing [qivpmdlu] Known exploit detection for CVE-2019-9213.
Removing [n9kprcm6] Known exploit detection.
Effective kernel version is 5.4.17-2136.306.1.3.el8uek

你現在回到了未應用 Ksplice 更新的原始狀態。在這種情況下,我們批量應用了更新,但你也可以通過指定它們的 ID 單獨應用。

# uptrack-uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

提醒一下,當你查看已應用的 Ksplice 更新時,不會看到任何內容。

# uptrack-show
Installed updates:
None

Effective kernel version is 5.4.17-2136.306.1.3.el8uek

結論

你理解什麼是 Ksplice 了嗎?此外,我們相信當你實際使用它時,你會發現它非常易於使用。在下一篇文章中,我們將更詳細地討論 Ksplice。