真正起作用的是用 install 指令强制失败,而非仅 blacklist;需在 /etc/modprobe.d/ 下建 .conf 文件,同时写 blacklist 模块名 和 install 模块名 /bin/false,并更新 initramfs 后重启验证。

直接用 blacklist 行禁用模块效果有限,真正起作用的是配合 install 指令强制失败。关键不在“加黑名单”,而在“堵死所有加载路径”。
正确配置黑名单文件
在 /etc/modprobe.d/ 下新建一个以 .conf 结尾的文件(如 disable-risky.conf),内容必须同时包含两行:
- blacklist 模块名:阻止 modprobe 主动加载该模块
- install 模块名 /bin/false:覆盖所有触发方式(包括依赖加载、udev 自动调用、脚本显式调用)
例如禁用 USB 存储支持:
blacklist usb-storage install usb-storage /bin/false blacklist uas install uas /bin/false
注意:不要写 usb-storage.ko 或 usb-storage.ko.xz,只写模块名 usb-storage。
避开常见失效陷阱
很多配置看似写了却没生效,往往卡在这几个环节:
- 文件名不以
.conf结尾(如blacklist或blacklist.txt),modprobe 会直接忽略 - 文件权限被设为 group 或 other 可写(如
chmod 664),modprobe 拒绝读取 - 只写
blacklist,没配install—— 一旦其他模块(如ums-realtek)依赖它,仍会被拉起 - 禁用了底层通用模块(如
usbcore),导致整条 USB 总线瘫痪
验证是否真正生效
不能只看 lsmod | grep xxx,要分三步确认:
- 运行
modprobe -n -v 模块名:输出中应出现install /bin/false,而非insmod路径 - 插入对应硬件(如 USB 设备)后执行
dmesg | tail -10:不应看到该模块 probe 成功的日志 - 执行
lsmod | grep 模块名:无任何输出(若之前已加载,需先sudo modprobe -r 模块名再测)
配套动作不可省略
仅改配置不够,还需确保 initramfs 更新并重启:
- Debian/Ubuntu 系统:
sudo update-initramfs -u - RHEL/CentOS/Fedora 系统:
sudo dracut --force - 重启后测试,否则旧 initramfs 仍可能在启动早期加载模块
如果模块是编译进内核的(不是独立 .ko 文件),黑名单完全无效,只能通过内核启动参数 modprobe.blacklist=xxx 临时屏蔽,或重编内核。


















