返回
2025/03/19
4. 你用过 Ksplice 吗?
在本文中,我们将介绍 Oracle Linux 的一项功能——Ksplice。Ksplice 是一个实时补丁系统,允许您在不重启操作系统的情况下为内核应用补丁。它已有超过 10 年的历史,是目前无与伦比的优秀功能。然而,即使在使用 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 Kernel。
使用 Ksplice 需要互联网连接吗?
Ksplice 有在线和离线模式。在线模式连接到 Oracle 提供的 Unbreakable Linux Network(ULN),因此您需要能够连接到互联网(可能是通过互联网代理)。
此外,在离线模式下,您可以通过设置 Ksplice 镜像在不连接互联网的情况下使用 Ksplice。然而,用作 Ksplice 镜像的服务器必须能够连接到互联网。
Ksplice 的实时补丁覆盖哪些组件?
除了以下两个内核外,它还支持用户空间包 glibc 和 openssl。然而,只有 Oracle Linux 支持用户空间包。
- Red Hat 兼容内核
- Unbreakable Enterprise Kernel
- 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 hot patch 的功能。然而,它仅限于 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。如果配置文件存在且配置了 accesskey,您就可以使用 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。