Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

1.8. 防止在系统引导时自动载入内核模块

下面的步骤描述了如何在 denylist 中添加内核模块使其不会在引导过程中自动载入。

先决条件

  • root 权限。
  • 已安装 kmod 软件包。
  • 确定 denylist 中的内核模块对您当前系统配置并不重要。

流程

  1. 选择您要放入 denylist 中的内核模块:

    $ lsmod
    
    Module                  Size  Used by
    fuse                  126976  3
    xt_CHECKSUM            16384  1
    ipt_MASQUERADE         16384  1
    uinput                 20480  1
    xt_conntrack           16384  1
    …​

    lsmod 命令显示载入到当前运行的内核的模块列表。

    • 或者,找到您要防止载入的未加载内核模块。

      所有内核模块都位于 /lib/modules/<KERNEL_VERSION>/kernel/<SUBSYSTEM>/ 目录中。

  2. 为 denylist 创建配置文件:

    # vim /etc/modprobe.d/blacklist.conf
    
    	# Blacklists <KERNEL_MODULE_1>
    	blacklist <MODULE_NAME_1>
    	install <MODULE_NAME_1> /bin/false
    
    	# Blacklists <KERNEL_MODULE_2>
    	blacklist <MODULE_NAME_2>
    	install <MODULE_NAME_2> /bin/false
    
    	# Blacklists <KERNEL_MODULE_n>
    	blacklist <MODULE_NAME_n>
    	install <MODULE_NAME_n> /bin/false
    	…​

    示例中显示了由 vim 编辑器编辑的 blacklist.conf 文件的内容。黑名单 行可确保在引导过程中不会自动加载相关内核模块。但是,黑名单 命令不会阻止将模块作为不在 denylist 中的另一个内核模块的依赖项加载。因此,install 行 会导致 /bin/false 运行而不是安装模块。

    以 hash 符号开头的行是注释以便更易读。

    注意

    在输入内核模块的名称时,不要将. ko.xz 扩展附加到名称的末尾。内核模块名称没有扩展名,它们对应的文件有。

  3. 在重新构建前,为当前初始 ramdisk 镜像创建备份副本:

    # cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img

    如果新版本出现意外问题,以上命令会创建一个备份 initramfs 镜像。

    • 另外,还可创建其它初始 ramdisk 镜像的备份副本,该副本与您要将内核模块放入 denylist 中的内核版本对应:

      # cp /boot/initramfs-<SOME_VERSION>.img /boot/initramfs-<SOME_VERSION>.img.bak.$(date +%m-%d-%H%M%S)
  4. 根据更改生成新的初始 ramdisk 镜像:

    # dracut -f -v
    • 如果您要为当前引导的不同内核版本构建初始 ramdisk 镜像,请指定目标 initramfs 和内核版本:

      # dracut -f -v /boot/initramfs-<TARGET_VERSION>.img <CORRESPONDING_TARGET_KERNEL_VERSION>
  5. 重启系统:

    $ reboot
重要

此流程中描述的更改将在重启后生效并保留。如果您将关键内核模块错误地放入 denylist 中,您会遇到不稳定的情况或系统无法正常工作。

其它资源

  • 如需有关 dracut 实用程序的更多详细信息,请参阅 dracut(8)手册页
  • 有关防止在 Red Hat Enterprise Linux 8 及更早的版本中系统引导时自动载入内核模块的更多信息,请参阅 如何防止内核模块自动载入?