blacklist单独使用几乎总失效,因其仅拦截显式modprobe调用,无法阻止udev自动加载、依赖触发或initramfs预加载;真正有效的是配合install module_name /bin/false、正确配置文件路径与权限,并执行update-initramfs -u或dracut --force更新初始内存盘。

直接写 blacklist module_name 几乎总失效——它拦不住 udev 自动加载、拦不住依赖触发、更拦不住 initramfs 预加载。真正起作用的是 install module_name /bin/false,且必须配合配置文件位置、权限和 initramfs 更新。
为什么 blacklist 单独用不管用
blacklist 只在显式执行 modprobe module_name 时生效。但现实中:
- USB 设备插入后,
udev规则会自动调用modprobe usb-storage - 某个网络模块被
nft或iptables依赖,内核会走request_module()触发加载 - initramfs 启动阶段已把
usb-storage.ko拉进内存,配置还没读到 - 模块名拼写错误(如写成
usb-storage.ko)、文件没放对位置、权限设为664,modprobe全部静默忽略
正确禁用模块的三要素
缺一不可:
- 配置文件必须放在
/etc/modprobe.d/下,且以.conf结尾(如/etc/modprobe.d/disable-usb.conf) - 内容必须同时包含两行:
blacklist usb-storage和install usb-storage /bin/false - 运行
sudo update-initramfs -u(Debian/Ubuntu)或sudo dracut --force(RHEL/CentOS),否则重启后仍从旧 initramfs 加载
验证是否真生效的硬性检查点
改完别急着 reboot,先做这三件事:
- 运行
modprobe -n -v usb-storage:输出里必须出现install /bin/false,而不是insmod /lib/modules/... - 插上 U 盘后立刻执行
dmesg | tail -10:不能出现usb-storage、scsi add-single-device等 probe 日志 - 执行
lsmod | grep usb-storage:无任何输出;若之前已加载,得先sudo modprobe -r usb-storage再查
模块是 built-in 时怎么办
如果 grep CONFIG_USB_STORAGE /boot/config-$(uname -r) 返回 CONFIG_USB_STORAGE=y,说明模块已编译进内核,/etc/modprobe.d/ 配置完全无效。此时只能:
- 加内核启动参数:
modprobe.blacklist=usb-storage到GRUB_CMDLINE_LINUX_DEFAULT - 运行
sudo update-grub(Debian/Ubuntu)或sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL) - 重启生效
注意:built-in 模块无法卸载,黑名单参数仅阻止其在 initramfs 之后被重复“加载”,实际功能仍存在。











