我想阻止某个驱动程序模块加载到 Linux 内核中。所以我在 /etc/modprobe.d/cdc_acm.conf 中创建了一个文件。在此文件中,我添加了以下行:
install cdc_acm /bin/false
这在发出时按预期工作:
modprobe cdc-acm
libkmod: ERROR libkmod/libkmod-module.c:924
command_do: Error running install command for cdc_acm ERROR: could not
insert 'cdc_acm': Operation not permitted
问题是,当我使用 insmod 实用程序时,会加载模块:
insmod cdc-acm.ko
[ 1051.914578] cdc_acm 2-1.1:1.0:
usb_probe_interface [ 1051.919437] cdc_acm 2-1.1:1.0:
usb_probe_interface - got id [ 1051.926323] cdc_acm 2-1.1:1.0:
ttyACM0: USB ACM device [ 1051.934700] usbcore: registered new
interface driver cdc_acm [ 1051.941315] cdc_acm: USB Abstract Control
Model driver for USB modems and ISDN adapters
为什么会发生这种情况有没有办法为 insmod 创建黑名单文件?
答案1
黑名单由 insmod 读取,modprobe
其中 insmod 只是尝试插入模块,而不考虑依赖项或黑名单或任何其他内容。
insmod
手册页:
insmod is a trivial program to insert a module into the kernel. Most users will want to
use modprobe(8) instead, which is more clever and can handle module dependencies.