可通过编译内核禁用usb存储模块或运行时屏蔽驱动来阻止识别u盘等设备:编译时设config_usb_storage=n并禁用uas、scsi磁盘支持;运行时通过modprobe黑名单、更新initramfs、卸载模块及限制modprobe权限实现。

可以通过内核编译时禁用相关模块,或运行时屏蔽USB存储驱动,来阻止系统识别U盘、移动硬盘等USB存储设备。核心思路是让内核无法加载 usb-storage 及其依赖(如 uas、sd_mod),同时防止用户态通过 modprobe 动态加载。
编译内核时彻底移除USB存储支持
适用于定制化程度高、可控制内核版本的场景(如嵌入式设备、安全加固服务器):
- 进入内核源码目录,运行
make menuconfig - 定位到:Device Drivers → USB support → USB Mass Storage support,将其设为 no(不是 m)
- 同时检查并禁用:USB Attached SCSI (UAS)、SCSI disk support(
CONFIG_SCSI_DISK=n),避免绕过 usb-storage 直接识别UAS设备 - 保存配置并重新编译安装新内核
运行时屏蔽USB存储模块(无需重装内核)
适用于通用Linux发行版,操作快速且可逆,但需配合权限管控:
- 在
/etc/modprobe.d/下新建文件(如blacklist-usb-storage.conf),加入:
blacklist usb-storage blacklist uas install usb-storage /bin/false install uas /bin/false
- 执行
sudo update-initramfs -u(Debian/Ubuntu)或sudo dracut -f(RHEL/CentOS/Fedora)更新 initramfs,确保启动阶段即生效 - 卸载已加载模块:
sudo modprobe -r uas usb-storage(若提示 busy,先终止使用USB存储的进程)
限制普通用户加载内核模块
防止有 sudo 权限的用户绕过黑名单手动加载:
- 修改
/etc/sudoers,禁止非授权用户执行 modprobe:添加类似%wheel ALL=!/sbin/modprobe usb-storage, !/sbin/modprobe uas - 更严格方式:设置内核参数
module.sig_unenforce=0并启用模块签名验证,仅允许加载带可信密钥签名的模块 - 结合
sysctl kernel.modules_disabled=1(需 root,且不可逆,仅限极端场景)
验证是否生效
插入USB存储设备后确认系统未识别:
- 运行
dmesg | tail -20,不应出现usb-storage、scsi add-single-device或sdX相关日志 - 执行
lsmod | grep -E "(usb-storage|uas|sd_mod)",输出应为空 - 检查
/proc/bus/usb/devices或ls /sys/bus/usb/devices/*/product,确认无大容量存储类设备(如含 "Mass Storage" 字样)










