您可以通过本文了解获取Alibaba Cloud Linux 2内核热补丁的方式,以及如何在Alibaba Cloud Linux 2实例内启用、禁用内核热补丁或禁用kpatch系统服务。

背景信息

内核热补丁的相关操作说明如下:
  • 如何获取内核热补丁以及如何查看热补丁的具体信息,请参见获取内核热补丁
  • 如果您需要在操作系统中启用内核热补丁,具体操作,请参见启用内核热补丁
  • 如果操作系统中已启用的内核热补丁存在问题,您可以禁用该补丁。具体操作,请参见禁用内核热补丁
  • 如果操作系统中已启用了内核热补丁,但您需要在重启服务器时,使操作系统不自动加载所有的热补丁的内核模块,您可以禁用kpatch系统服务。具体操作,请参见禁用kpatch系统服务

获取内核热补丁

每一个内核热补丁均通过RPM包发布,您可以通过以下任一方式获取热补丁的安装包:
  • Alibaba Cloud Linux 2 CVE公告平台
    1. 访问CVE公告平台。

      所有已发布的热补丁都将在CVE公告平台上公示,您可以访问Alibaba Cloud Linux 2.1903 Security Advisories进行查看。

    2. 单击Advisory ID列后的CVE排序图标图标重新排序列表内的信息,将热补丁的相关更新展示在最上方。CVE ID排序
      关于CVE公告平台中的信息说明,如下表所示。
      列信息 说明
      Affected Packages 表示内核热补丁的具体包名。名称以kernel-hotfix-为前缀,以Alibaba Cloud Linux操作系统的子版本号信息为后缀。
      您可以通过名称后缀确认该热补丁是否适用于您的Alibaba Cloud Linux 2操作系统。例如:
      • Affected Packages的信息为kernel-hotfix-3768348-21.al7
      • 您在Alibaba Cloud Linux 2操作系统中运行uname -r命令的回显结果为kernel-4.19.91-21.al7
      子版本号信息均为 21.al7,则表示该热补丁适用于您的Alibaba Cloud Linux 2操作系统。
      Advisory ID 表示热补丁的发布序号。分为安全漏洞(CVE)和错误修复(Bugfix)两类热补丁,命名有如下区别:
      • 安全漏洞补丁以HOTFIX-SA-为前缀。
      • 错误修复补丁以HOTFIX-BA-为前缀。
      您可以单击热补丁的Advisory ID查看补丁的详细信息,并支持下载热补丁的RPM包。
      CVE ID(s) 表示具体修复的安全漏洞(CVE)ID号。如果是错误修复热补丁,则CVE ID(s)列的内容为空。
    3. 单击Advisory ID列下对应的热补丁发布序号,进入热补丁详情页。
      在该页面,您可以查看热补丁的详细信息,以及热补丁RPM包对应的名称。 rpm包信息

      补丁RPM包的格式为kernel-hotfix-{hotfix_id}-{操作系统子版本号}-{hotfix版本号}-{hotfix制作时间戳}.{操作系统大版本号}.{体系架构}.rpm

      例如上图所示的格式RPM包名称说明:
      • 3768348:热补丁的ID。
      • 21.al7:匹配的Alibaba Cloud Linux 2子版本号,您的Alibaba Cloud Linux 2操作系统的内核版本需要与该版本一致,才可以使用该热补丁。操作系统的内核版本信息可以在ECS实例内运行uname -r查看。
      • 1.0:热补丁的RPM包版本号。
      • 20200921195553:热补丁的制作时间为2020年09月21日19时55分53秒。部分历史版本的热补丁中该字段可能为无效的值。
      • al7:匹配的Alibaba Cloud Linux 2版本号。Alibaba Cloud Linux 2操作系统的版本号均为al7。
      • x86_64:适用的操作系统的体系架构为x86_64。
  • yum源

    您可以通过yum list命令查询相应的内核热补丁安装包。具体操作,请参见启用内核热补丁

启用内核热补丁

  1. 远程连接需要热补丁的Alibaba Cloud Linux实例。
    具体操作,请参见 连接方式概述
  2. 运行以下命令,安装kpatch工具。
    sudo yum -y install kpatch
  3. 安装热补丁。
    1. 运行以下命令,查看操作系统的内核版本信息。
      sudo uname -r
      本示例中,查询结果如下所示。可以确认该操作系统的子版本号为 21.al7
      4.19.91-21.al7.x86_64
    2. 使用yum list命令查询适用于该操作系统的内核热补丁。
      命令格式为:
      sudo yum list | grep "kernel-hotfix" | grep "<操作系统的子版本号>"
      本示例中,操作系统的子版本号为 21.al7,需要运行以下命令:
      sudo yum list | grep "kernel-hotfix" | grep "21.al7"
      回显结果示例,如下所示:
      kernel-hotfix-5000697-21.al7.x86_64       1.0-20210318135805.al7       @exp
      kernel-hotfix-3768348-21.al7.x86_64       1.0-20200921195553.al7       exp
      kernel-hotfix-4121479-21.al7.x86_64       1.0-1.al7                    exp
    3. 安装指定的热补丁。
      本示例中,以 kernel-hotfix-4121479-21.al7.x86_64为例,说明如何通过 yum命令安装热补丁。
      说明 通过yum安装热补丁时,不需要指定RPM包文件的后缀 .rpm
      sudo yum -y install kernel-hotfix-4121479-21.al7.x86_64
  4. 运行以下命令,通过kpatch工具查看系统补丁的状态。
    sudo kpatch list
    回显结果如下所示,表示内核热补丁安装成功且已经生效。
    Loaded patch modules:
    kpatch_4121479 [enabled]
    
    Installed patch modules:
    kpatch_4121479 (4.19.91-21.al7.x86_64)

禁用内核热补丁

如果您已启用的热补丁存在问题(例如热补丁未生效),可以通过以下步骤禁用内核热补丁以解决问题。本示例将使用yum命令完成操作。

  1. 运行以下命令,查看可禁用的热补丁包。
    sudo yum list installed | grep kernel-hotfix
    回显结果示例,如下所示:
    kernel-hotfix-4121479-21.al7.x86_64
  2. 运行以下命令,删除存在问题的热补丁包。
    本示例中,以 kernel-hotfix-4121479-21.al7.x86_64为例。
    sudo yum -y remove kernel-hotfix-4121479-21.al7.x86_64
  3. 运行以下命令,确认存在问题的热补丁包已经被删除。
    sudo kpatch list
    回显结果如下所示,表示没有已安装并生效的热补丁。
    Loaded patch modules:
    
    Installed patch modules:

禁用kpatch系统服务

如果您的热补丁已安装并且已生效,但您需要在重启服务器时,使操作系统不自动加载所有的热补丁的内核模块,您可以通过以下操作步骤禁用kpatch系统服务。

  1. 运行以下命令,查看kpatch系统服务是否已启动。
    sudo systemctl is-enabled kpatch.service
    回显结果为 enabled,表示kpatch系统服务已启动。
  2. 运行以下命令,禁用kpatch系统服务。
    sudo systemctl disable kpatch.service
    回显结果如下所示,表示已禁用kpatch系统服务。
    Removed symlink /etc/systemd/system/multi-user.target.wants/kpatch.service.
  3. 运行以下命令,查看kpatch系统服务状态。
    sudo systemctl status kpatch.service
    回显结果如下所示,表示kpatch系统服务已禁用。
     kpatch.service - "Apply kpatch kernel patches"
       Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled)
    说明 如有需要,您可以运行 sudo systemctl enable kpatch.service命令,重新启用kpatch系统服务。