modprobe黑名单通过/etc/modprobe.d/*.conf中blacklist与install指令组合实现,仅拦截modprobe触发的加载;生效位置在modprobe调用时,不作用于内核启动自动加载、insmod或已加载模块。

modprobe黑名单的原理和生效位置
modprobe 本身不直接“禁用”模块,它只是按需加载内核模块的工具。所谓黑名单,其实是通过配置让 modprobe 在被请求加载某个模块时,主动返回失败(而不是去尝试加载)。真正起作用的是 /etc/modprobe.d/*.conf 中的 blacklist 指令,它只影响通过 modprobe 触发的加载行为,对内核启动时自动探测并加载的模块(如由硬件总线驱动自动绑定的)无效。
- 黑名单不阻止模块被手动用
insmod或lsmod后再rmmod操作 - 它也不影响已加载模块的运行,仅拦截后续的
modprobe xxx请求 - 配置文件必须以
.conf结尾,且权限不能是 group/o 可写(否则modprobe会忽略)
正确写法:blacklist + install 指令组合使用
单纯写 blacklist usb-storage 很容易失效——因为某些模块会间接依赖它(比如 ums-realtek),或被 udev 规则绕过。更可靠的做法是配合 install 指令强制返回错误:
blacklist usb-storage install usb-storage /bin/false
-
blacklist让modprobe usb-storage直接报错 -
install覆盖所有加载路径(包括依赖触发、udev 自动加载),执行/bin/false确保必然失败 - 若需禁用整个子系统(如所有 USB 存储类模块),可对通用模块(如
usb-storage、uas)都加这两行 - 注意不要 blacklist
usbcore或usb-common,否则可能瘫痪整个 USB 总线
验证是否生效的三个关键检查点
禁用后必须逐项确认,否则容易误以为成功:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 运行
modprobe -n -v usb-storage:应输出install /bin/false而非insmod路径 - 插入 USB 设备后执行
dmesg | tail -10:不应出现usb-storage相关 probe 日志 - 执行
lsmod | grep usb-storage:无输出(但注意,如果模块曾被加载过,需先rmmod usb-storage再验证)
常见陷阱:配置写在 /etc/modprobe.d/blacklist.conf 里,但文件被命名为 blacklist(缺 .conf 后缀);或配置后没重启 udev(一般不需要),却忘了重新插拔设备测试。
与内核启动参数 blacklist 的区别
内核命令行也可加 modprobe.blacklist=xxx,但它只在 initramfs 阶段生效,且优先级低于 /etc/modprobe.d/ 配置。实际场景中:
- 启动参数适合临时调试或 rescue 场景,无法持久化管理
-
/etc/modprobe.d/是生产环境唯一推荐方式 - 两者叠加时,
install /bin/false仍比纯blacklist更彻底,尤其防 udev 触发
真正难处理的是那些被编译进内核(built-in)、而非模块(module)的驱动——它们根本不受 modprobe 控制,只能通过重新编译内核或启用 lockdown mode 限制运行时加载。

















