返回
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。