内核热补丁操作说明

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

背景信息

内核热补丁的相关操作说明如下:

  • 如何获取内核热补丁以及如何查看热补丁的具体信息,请参见获取内核热补丁

  • 如果您需要在操作系统中启用内核热补丁,具体操作,请参见启用内核热补丁

  • 如果操作系统中已启用的内核热补丁存在问题,您可以禁用该补丁。具体操作,请参见禁用内核热补丁

  • 如果操作系统中已启用了内核热补丁,但您需要在重启服务器时,使操作系统不自动加载所有的热补丁的内核模块,您可以禁用kpatch系统服务。具体操作,请参见禁用kpatch系统服务

获取内核热补丁

每一个内核热补丁均通过RPM包发布,您可以通过以下任一方式获取热补丁的安装包:

  • Alibaba Cloud Linux CVE公告平台

    1. 访问CVE公告平台。

      所有已发布的热补丁都将在CVE公告平台上公示,您可以访问不同发行版本的CVE公告平台进行查看。

    2. 单击Advisory ID列名,重新排序列表内的信息,将热补丁的相关更新展示在最上方。

      HOTFIX开头的Advisory ID为内核热补丁,重新排序后如下图所示:排序安全更新

      关于CVE公告平台中的信息说明,如下表所示。

      列信息

      说明

      Affected Packages

      表示内核热补丁的具体包名。名称以kernel-hotfix-为前缀,以Alibaba Cloud Linux操作系统的子版本号信息为后缀。

      您可以通过名称后缀确认该热补丁是否适用于您的Alibaba Cloud Linux操作系统。例如:

      • Affected Packages的信息为kernel-hotfix-5928799-5.al8

      • 您在Alibaba Cloud Linux 3操作系统中运行uname -r命令的回显结果为5.10.23-5.al8.x86_64

      Alibaba Cloud Linux 3子版本号信息均为5.al8,则表示该热补丁适用于您的Alibaba Cloud Linux 3操作系统。

      说明

      Alibaba Cloud Linux 2操作系统的版本号均为al7。

      Advisory ID

      表示热补丁的发布序号。分为安全漏洞(CVE)和错误修复(Bugfix)两类热补丁,命名有如下区别:

      • 安全漏洞补丁以HOTFIX-SA-为前缀。

      • 错误修复补丁以HOTFIX-BA-为前缀。

      您可以单击热补丁的Advisory ID查看补丁的详细信息,并支持下载热补丁的RPM包。

      CVE ID(s)

      表示具体修复的安全漏洞(CVE)ID号。如果是错误修复热补丁,则CVE ID(s)列的内容为空。

    3. 单击Advisory ID列下对应的热补丁发布序号,进入热补丁详情页。

      在该页面,您可以查看热补丁的详细信息,以及热补丁RPM包对应的名称。更新包

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

      例如上图所示的格式RPM包名称说明:

      • 5928799:热补丁的ID。

      • 5.al8:匹配的Alibaba Cloud Linux 3子版本号,您的Alibaba Cloud Linux 3操作系统的内核版本需要与该版本一致,才可以使用该热补丁。操作系统的内核版本信息可以在ECS实例内运行uname -r查看。

      • 1.0:热补丁的RPM包版本号。

      • 20210720165816:热补丁的制作时间为2021年07月20日16时58分16秒。部分历史版本的热补丁中该字段可能为无效的值。

      • al8:匹配的Alibaba Cloud Linux 3版本号。Alibaba Cloud Linux 3操作系统的版本号均为al8。

        说明

        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

      本示例中,查询结果如下所示。可以确认该操作系统的子版本号为5.al8

      5.10.23-5.al8.x86_64
    2. 使用yum list命令查询适用于该操作系统的内核热补丁。

      命令格式为:

      sudo yum list | grep "kernel-hotfix" | grep "<操作系统的子版本号>"

      本示例中,操作系统的子版本号为5.al8,需要运行以下命令:

      sudo yum list | grep "kernel-hotfix" | grep "5.al8"

      回显结果示例,如下所示:

      kernel-hotfix-5928799-5.al8.x86_64           1.0-20210720165816.al8                    alinux3-plus      
      kernel-hotfix-5956925-5.al8.x86_64           1.0-20210726171200.al8                    alinux3-plus 
    3. 安装指定的热补丁。

      本示例中,以kernel-hotfix-5928799-5.al8.x86_64为例,说明如何通过yum命令安装热补丁。

      说明

      通过yum安装热补丁时,不需要指定RPM包文件的后缀.rpm

      sudo yum -y install kernel-hotfix-5928799-5.al8.x86_64
  4. 运行以下命令,通过kpatch工具查看系统补丁的状态。

    sudo kpatch list

    回显结果如下所示,表示内核热补丁安装成功且已经生效。

    Loaded patch modules:
    kpatch_5928799 [enabled]
    
    Installed patch modules:
    kpatch_5928799 (5.10.23-5.al8.x86_64)

禁用内核热补丁

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

  1. 运行以下命令,查看可禁用的热补丁包。

    sudo yum list installed | grep kernel-hotfix

    回显结果示例,如下所示:

    kernel-hotfix-5928799-5.al8.x86_64  1.0-20210720165816.al8            @alinux3-plus
  2. 运行以下命令,删除存在问题的热补丁包。

    本示例中,以kernel-hotfix-5928799-5.al8.x86_64为例。

    sudo yum -y remove kernel-hotfix-5928799-5.al8.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系统服务。