如何在 Ubuntu/Debian Linux 上将模块列入黑名单
有时您可能需要在 Linux 系统引导期间禁用某些内核模块的加载。在本指南中,我们将讨论在 Ubuntu 和任何其他基于 Debian 的发行版上将模块(包括其依赖项)列入黑名单的几种不同方法。这将有效地永久禁止模块在启动期间加载。
在本教程中您将学习:
如何在基于 Ubuntu/Debian 的 Linux 发行版上将内核模块列入黑名单
将 Ubuntu Linux 上的内核模块列入黑名单
禁止加载黑名单模块
请按照以下步骤操作,了解如何将内核模块列入黑名单,以免在系统上加载。
让我们首先列出 Linux 系统当前加载的所有模块:
$ lsmod .... ehci_hcd 40249 0 usbcore 128741 4 ehci_hcd,ohci_hcd,usbhid usb_common 12354 1 usbcore e1000 86156 0 libata 140630 4 libahci,ahci,ata_piix,ata_generic ....
lsmod 命令列出了所有当前加载的内核模块。上面的 lsmod 输出已被缩短。
假设我们要将
usbcore
模块列入黑名单。在卸载任何模块或将其列入黑名单之前,最好先看看还有哪些其他模块依赖于该模块:$ modinfo -F depends usbcore usb-common
从上面的输出我们可以看到
usb-common
模块依赖于usbcore
。要将没有依赖项的模块列入黑名单,我们将创建一个/etc/modprobe.d/blacklist.conf
(如果尚不存在)文件并向其中添加以下行:blacklist usbcore
完成后,更新 initramfs 并重新启动系统:
# update-initramfs -u # reboot
重新启动后,使用lsmod
查看模块当前是否已加载。如果其他模块依赖于您尝试列入黑名单的模块,如上面的示例所示,您将需要将所有依赖模块列入黑名单,否则您列入黑名单的初始模块无论如何都会加载。幸运的是,有一个技巧可以将所有模块(包括其依赖项)列入黑名单。
如果出于任何原因,您无法将模块及其所有依赖项列入黑名单,则会导致该模块无法加载,从而导致所有依赖模块无法加载。将以下行添加到您的 /etc/modprobe.d/blacklist.conf
中,将 usbcore
完全列入黑名单,包括其所有依赖模块:
install usbcore /bin/true
然后,更新 initramfs 并重新启动:
# update-initramfs -u
为了完整起见,请注意,最好为每个列入黑名单的模块创建单独的模块配置文件。例如,如果您希望将模块 e1000
列入黑名单,则创建一个单独的 /etc/modprobe.d/e1000.conf
文件。
结束语
在本指南中,我们了解了如何将 Ubuntu 和其他基于 Debian 的 Linux 系统中的内核模块列入黑名单。当您需要在启动时暂时或永久阻止模块加载时,这非常有用。如果您需要允许模块再次加载,则可以通过删除文件来简单地恢复更改。这些指令允许模块保留在您的系统上,同时只是阻止它自动加载。