禁止指定 USB 端口上除大容量存储之外的任何 USB 设备类型

禁止指定 USB 端口上除大容量存储之外的任何 USB 设备类型

我已经寻找答案,但找不到此任务的确切解决方案。

我是 Linux 新手,但我想学习,并且想知道如何禁止除指定 USB 端口中插入闪存驱动器之外的任何 USB 设备类型。我知道如何为 udev 编写匹配规则,但我找不到在udevadm事件上阻止指定 USB 端口的脚本的真实示例。

首先,我创建了一个规则/etc/udev/rules.d/96-myusb.rules来匹配 USB 设备类型:

ACTION=="add", SUBSYSTEM=="usb", ENV{ID_TYPE}!="disk", ENV{ID_USB_DRIVER}!="usb-storage",RUN+="/lib/udev/unmount.sh"

如果我错了,请纠正我。

然后我必须编写一个 shell 脚本,该脚本将由前面的规则执行,以阻止指定 USB 端口上不匹配的设备 - 这对我来说就是问题。

答案1

要使用 udev 正确执行此操作,您实际上需要将所有 USB 端口上的内容设置为默认阻止,然后编写规则来匹配设备并允许您想要的内容通过(在这种情况下,大多数端口上的所有内容,只有 MSC和特定端口上的 UAS 设备)。如果不这样做,在设备被阻止之前,系统对设备可见的时间很短,这可能会完全抵消一开始阻止它的任何好处,因为内核驱动程序将开始与在阻止它之前,它超出了枚举范围。

就脚本本身而言,您可能不需要它。根据您在层次结构中与 udev 规则匹配的位置,您应该能够仅设置属性authorized以允许某些操作。

或者,看看USB卫士。这是处理此类事情的专门服务。不幸的是,它没有在许多发行版上预先打包,但了解它的工作原理可能有助于弄清楚如何使用 udev 来做到这一点。

相关内容