返回

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。