禁用USB存储设备需三层协同:一、永久屏蔽usb-storage和uas内核模块,更新initramfs;二、用udev规则按接口类08/06/50屏蔽设备授权;三、禁用udisks2用户挂载权限并移出disk组,确保无/dev/sdX节点生成。

直接禁用 USB 存储设备,核心是阻断 usb-storage 和 uas 模块加载、阻止内核生成存储类设备节点、并切断用户挂载路径。单靠某一种方法容易被绕过,必须三层协同生效。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
禁用 usb-storage 和 uas 内核模块
这是最底层、最有效的拦截点。这两个模块不加载,绝大多数 U 盘、移动硬盘连设备节点都不会生成。 - 临时卸载(验证用):sudo modprobe -r usb-storage uas;若报“模块正被使用”,先 sudo umount /dev/sdX* 卸载已挂载设备
- 永久屏蔽(推荐):在 /etc/modprobe.d/blacklist.conf 中添加:
blacklist usb-storageblacklist uasinstall usb-storage /bin/falseinstall uas /bin/false
- 修改后必须更新 initramfs:sudo update-initramfs -u(Debian/Ubuntu)或 sudo dracut --force(RHEL/Fedora),否则重启后无效
用 udev 规则屏蔽存储接口类 08/06/50
即使模块没加载,某些设备仍可能触发内核事件或生成/dev/sdX 节点。udev 规则可主动忽略或撤销授权。
- 创建规则文件:sudo nano /etc/udev/rules.d/99-disable-usb-storage.rules
- 写入以下任一规则(推荐第二条,更彻底):
SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="08", ATTRS{bInterfaceSubClass}=="06", ATTRS{bInterfaceProtocol}=="50", ENV{UDISKS_IGNORE}="1"
或(直接禁用设备授权):
SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="08", ATTR{bInterfaceSubClass}=="06", ATTR{bInterfaceProtocol}=="50", RUN+="/bin/sh -c 'echo 0 > /sys$DEVPATH/authorized'"
- 重载规则:sudo udevadm control --reload-rules && sudo udevadm trigger
- 注意:不要用 ATTRS{idVendor} 或 ATTRS{idProduct} 做匹配——这只能封特定厂商,而接口类 08/06/50 是 USB 大容量存储标准,覆盖更全
限制 udisks2 挂载权限与 disk 组访问
作为纵深防御,防止设备被识别后仍被普通用户挂载或直接读写块设备。 - 确保/etc/udisks2/udisks2.conf 中有:
[defaults]allow_user_mount=false
- 将普通用户从 disk 组移出:sudo gpasswd -d username disk(否则仍可通过 sudo dd if=/dev/sdX 读取)
- 检查 /etc/fstab,删除任何含 /dev/sdX 的自动挂载项;如需固定盘,请改用 UUID
- 不要依赖 noexec,nosuid,nodev 等挂载选项——这些只对已挂载设备起作用,而目标是不让它挂上
验证时别只看 lsmod
插 U 盘后,仅执行lsmod | grep -E "(usb-storage|uas)" 是不够的。必须组合验证:
- dmesg | tail -20 查看内核是否打印 “usb-storage: probe of” 或 “uas: probe of” —— 有即失败
- ls /sys/bus/usb/drivers/ 看 usb-storage 和 uas 是否不在其中
- ls /dev/sd* 是否无新增设备节点
- udisksctl status 是否不列出该设备
- 还要试 MTP 设备(手机),它走 usbmisc 不走 usb-storage,若需一并禁用,得额外处理 mtp 模块和 gvfs 服务
真正生效的标志不是“U 盘灯亮了但没弹窗”,而是系统根本没把它当存储设备看待——没有 /dev/sdX,没有内核日志,也没有 udisks 记录。漏掉任意一层,都可能被绕过。

















