Linux禁用USB存储设备需协同内核模块控制、udev规则与权限策略:禁用usb-storage/uas模块,配置udev屏蔽存储类设备,限制用户挂载及设备节点访问,并验证MTP等绕过方式。

Linux系统中禁用USB存储设备或限制其访问权限,核心在于内核模块控制、udev规则配置与权限策略三方面协同。重点不是彻底屏蔽所有USB功能,而是精准阻断可移动存储类设备(如U盘、移动硬盘)的识别与挂载,同时保留鼠标、键盘等必要外设。
禁用USB存储驱动模块
最直接有效的方式是阻止内核加载usb-storage和uas(USB Attached SCSI)模块,这两者是识别USB大容量存储设备的关键。
- 临时禁用:运行sudo modprobe -r usb-storage uas,若提示“模块正被使用”,需先卸载已挂载的USB设备
- 永久禁用:在/etc/modprobe.d/blacklist.conf中添加两行:
blacklist usb-storage
blacklist uas - 为防模块被其他驱动自动加载,还可添加:
install usb-storage /bin/false
install uas /bin/false
通过udev规则限制设备节点创建
即使模块未加载,某些USB设备仍可能生成节点或触发事件。udev规则可在设备接入时主动拒绝处理存储类设备。
- 新建规则文件/etc/udev/rules.d/99-disable-usb-storage.rules
- 写入规则屏蔽常见存储设备类型:
SUBSYSTEM=="usb", ATTR{idVendor}=="*", ATTR{idProduct}=="*", ENV{ID_USB_INTERFACES}=="*:080650:*", ENV{UDISKS_IGNORE}="1"
SUBSYSTEM=="usb", ATTR{idVendor}=="*", ATTR{idProduct}=="*", 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
限制普通用户挂载权限
即便USB设备被识别,也可防止非特权用户挂载读写,从访问层加固。
- 确认/etc/fstab中无自动挂载USB条目;检查/etc/udisks2/udisks2.conf,将[defaults] enable_smart= false及enable_ata_smart=false保持关闭,并确保[udisks2] allow_user_mount=false(默认为false,建议显式设置)
- 移除用户对/dev/sd*等块设备的读写权限:
可通过GROUPS="disk"组控制,将普通用户从disk组中移出:
sudo gpasswd -d username disk - 挂载时强制指定noexec,nosuid,nodev等选项,例如在/etc/fstab中添加:
UUID=xxxx /mnt/usb vfat noauto,noexec,nosuid,nodev,uid=1000,gid=1000 0 0
验证与补充防护
禁用后需实际测试并排查绕过可能。
- 插入U盘后执行lsusb应仍可见设备,但lsblk和dmesg | grep -i "usb.*storage"不应出现新块设备或驱动加载日志
- 注意部分设备(如带USB-C接口的手机)可能以MTP模式连接,不依赖usb-storage,需额外通过mtp-tools或libmtp策略限制
- 如需审计USB行为,可启用auditd监控/dev/sd*访问或modprobe调用:
-a always,exit -F arch=b64 -S init_module -F module=usb-storage -k usb_block










