SUSE Linux Enterprise Server 上的内核实时修补
- 内容
了解和使用 SUSE Linux Enterprise Server 上的内核实时修补功能。
- 原因
为了在不停机的情况下确保关键业务系统的安全性。
- 工作量
读完本文需要 20 分钟。
- 目标
了解内核实时修补功能的工作原理。
- 要求
具备 Linux 操作基础知识。
1 内核实时修补简介 #
内核实时修补 (KLP) 能够在不重引导系统的情况下,为 Linux 内核应用最新的安全更新。这一功能可最大限度地延长系统运行时间、提升可用性,对关键业务系统而言尤为重要。因此,KLP 具有多项优势。
对于需要获取或维持特定合规认证的组织而言,确保大量服务器自动保持最新状态至关重要。KLP 可助力实现合规要求,同时减少对维护期的需求。
签订了服务等级协议的公司必须保证系统达到特定的可访问性和运行时间标准。实时修补可在无停机的情况下修补系统,满足这一需求。
由于 KLP 是标准系统更新机制的一部分,因此无需专门培训,也无需引入额外的维护流程。
1.1 内核实时修补适用范围 #
SLES Live Patching 的适用范围包括:针对 SUSE 通用漏洞评分系统 (CVSS) 7 级及以上漏洞的修复,以及与系统稳定性或数据损坏相关的 bug 修复。不过,从技术角度而言,并非所有符合上述类别的修复都能制作实时补丁。因此,若因技术原因无法为某项修复制作内核实时修补,SUSE 保留跳过该修复的权利。目前超过 95% 的合格修复都是以实时补丁的形式发布的。SUSE CVSS 基于 CVSS v3.0 系统。有关 CVSS 的详细信息,请参见 Common Vulnerability Scoring System SIG。
1.2 内核实时修补局限性 #
KLP 涉及替换功能和妥善处理相互依赖的功能集的替换。这通过将旧代码调用重定向到不同内存位置的更新代码来完成。数据结构的变化使情况变得更加复杂,因为数据会保持原状,无法扩展或重新解译。尽管使用某些技术可以间接更改数据结构,但某些修复无法转换为实时补丁。在此情况下,只能通过系统重启来应用修复。
2 了解内核实时补丁 #
内核实时补丁是在常规的系统更新过程中安装的。内核实时补丁通过内含经过修改的代码的软件包提供,此类软件包与主内核软件包不同。实时补丁具有累积性,因此最新的补丁包含内核软件包先前补丁的所有修复。每个内核在线软件包都与为其发布的确切内核修订版关联。每新增一个修复,实时补丁软件包版本号都会相应增加。要确定内核修补状态,请使用 klp -v patches 命令。
实时补丁仅包含关键修复,不会替代常规的内核更新,后者需要重引导系统。可以将实时补丁视为在执行适当的内核更新和重引导前用于暂时保护内核的措施。
下图阐述了实时补丁与内核更新之间的总体关系。使用 klp
-v patches 命令可以查看当前有效的实时补丁所针对的 CVE 列表和缺陷报告。
您可以安装多个版本的内核软件包及其实时补丁。这些软件包不会冲突。您可以为正在运行的内核安装更新的内核软件包及实时补丁。在此情况下,您可能会收到重引导系统的提示。对于订阅了 SLES Live Patching 的用户,只要当前运行的内核存在实时补丁更新,就有资格获得技术支持。
激活 KLP 后,每个内核更新都会附带实时补丁软件包。此实时补丁不包含任何修复,而是充当相应内核未来实时补丁的种子。这些空种子补丁称为 initial patches。
请记住,虽然系统上可能会安装多个内核软件包,但任何时间只有一个软件包在运行。同样,虽然系统上可能会安装多个实时补丁软件包,但只有一个实时补丁会加载到内核中。
有效的实时补丁包含在 initrd 中。这表示如果发生了意外重引导,系统启动时会应用在线补丁修复,因此不需要再次执行修补。
3 从命令行激活内核实时修补 #
内核实时修补包含在标准 SLES 订阅中。要使用该功能,您需要安装以下软件集:
#zypper install -t pattern lp_sles
至此,系统已完成实时修补。
后台进行的过程如下:当软件包安装系统检测到某个安装的内核可以实时修补,并且软件通道中存在相应的实时补丁时,系统会选择安装该实时补丁。然后内核会在软件包安装过程中接收到实时补丁修复。在产品安装完成前,内核就会进行实时修补。
4 排查内核实时修补问题 #
4.1 检查实时补丁的失效日期 #
请确保已安装 lifecycle-data-sle-module-live-patching,然后运行 zypper lifecycle 命令。在输出的 Package end of support
if different from product 部分应该可以看到实时补丁的失效日期。
每个实时补丁自底层内核软件包发布起 13 个月内都可获享更新。访问 Maintained kernels, patch updates and lifecycle 页面,无需安装产品扩展,即可根据当前运行的内核版本查询实时补丁的到期日期。
4.2 检查安装了哪些内核实时补丁软件包 #
如果已为正在运行的内核安装 kernel-livepatch-* 软件包,内核会进行实时修补。您可以使用 zypper se --details kernel-livepatch-* 命令来检查您的系统上安装了哪些内核实时补丁软件包。
4.3 阻止重引导 #
如果安装了 kernel-default 软件包,更新管理器会提示您重引导系统。为避免此消息显示,您可以将内核更新从修补操作中筛除。这可以通过使用 Zypper 添加软件包锁来实现。
4.4 检查修补状态 #
可以使用 klp status 命令来检查修补状态。要检查安装的补丁,请运行 klp -v
patches 命令。
4.5 降级内核补丁 #
如果您发现了最新的实时补丁有问题,可以将当前安装的实时补丁降级回之前的版本。请注意,在系统日志中跟踪内核警告或内核错误的系统可能不适合使用补丁降级过程。如果您不确定系统是否满足补丁降级的要求,请联系 SUSE 技术支持部门获得帮助。
要降级最新的内核实时补丁,请使用 klp
downgrade 命令。此命令会自动检测最新实时补丁的版本并安装上一版本的补丁。
5 法律声明 #
版权所有© 2006–2025 SUSE LLC 和撰稿人。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在“GNU Free Documentation License”部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。
