blacklist指令本身不生效,关键在install /bin/false:它强制所有加载路径执行失败,必须与blacklist成对使用;配置文件须置于/etc/modprobe.d/下、以.conf结尾、权限644;若模块编译进内核则需改GRUB参数。

blacklist 指令本身不生效?关键在 install /bin/false
单独写 blacklist usb-storage 几乎总失效——它只拦得住手动执行 modprobe usb-storage,拦不住 udev 插入 U 盘时自动调用、拦不住 ums-realtek 依赖它时顺带拉起、更拦不住 initramfs 启动阶段就预加载。真正起作用的是 install usb-storage /bin/false 这一行:只要系统任何路径尝试加载该模块,就会执行 /bin/false 并立即失败。
必须成对出现:
blacklist usb-storageinstall usb-storage /bin/false
缺一不可。只写 blacklist 是摆设;只写 install 而没 blacklist 也能工作,但加 blacklist 是明确语义和兼容旧工具的习惯做法。
/etc/modprobe.d/ 下的 .conf 文件必须满足三个硬性条件
配置文件放错位置、命名不对、权限松动,modprobe 全部静默忽略,不会报错也不会生效。
- 路径必须是
/etc/modprobe.d/下,不能是/etc/或/etc/modprobe.d/blacklist(无后缀) - 文件名必须以
.conf结尾,例如/etc/modprobe.d/usb-security.conf,blacklist.txt或disable-module都无效 - 文件权限不能包含 group 或 other 写权限,推荐
chmod 644 /etc/modprobe.d/usb-security.conf;若设为664或更宽,modprobe 直接跳过读取
禁用前先确认模块是否可被 blacklist 影响
不是所有模块都能靠配置文件禁用。核心区别在于模块是独立 .ko 文件,还是编译进内核(built-in)。
- 运行
ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko*,能列出文件说明它是可加载模块,blacklist+install有效 - 运行
grep CONFIG_USB_STORAGE /boot/config-$(uname -r),如果输出是CONFIG_USB_STORAGE=y,说明已编译进内核,此时配置文件完全无效,只能用内核启动参数:modprobe.blacklist=usb-storage加到 GRUB 的GRUB_CMDLINE_LINUX_DEFAULT中,再sudo update-grub && reboot - 注意模块名不含扩展名:写
usb-storage,别写usb-storage.ko或usb-storage.ko.xz
改完配置后不更新 initramfs = 白改
即使配置文件写对、权限设好、install /bin/false 也写了,若不更新 initramfs,重启后仍可能从旧镜像里把模块拉起来——尤其 USB、storage、network 类模块常被 initramfs 预加载。
- Debian/Ubuntu 系统:运行
sudo update-initramfs -u - RHEL/CentOS/Fedora 系统:运行
sudo dracut --force - 验证是否进镜像:解压当前 initramfs 查看内容(谨慎操作),或直接重启后立刻运行
lsinitrd | grep usb-storage,无输出才说明真进了新镜像
最易被忽略的是:模块可能已被加载,而你只改了配置却没卸载它。测试前务必先 sudo modprobe -r usb-storage(若失败说明有依赖,得先 lsmod | grep usb-storage 找出谁在用它),再验证 modprobe -n -v usb-storage 输出是否含 install /bin/false。


















