如何在Linux环境中基于供应商ID禁用USB设备?


Answers:


10

您可以创建udev规则,该规则默认情况下禁用设备,但通过供应商ID启用某些设备。制作一个/etc/udev/rules.d/01-usblockdown.rules包含禁用设备规则的文件:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"

然后使用规则启用要允许的设备(您可以ATTR{idVendor}用来获取供应商ID):

ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

有关更多信息,请参见“使用UDEV锁定Linux”


以上命令是否足够,或者我们必须执行任何udevadm触发器才能获得此效果。
subbarao

嗨,斯蒂芬,我们必须添加两个规则以允许特定的Pendrive?
subbarao

@subbarao是的,您必须添加两个规则,第一个默认情况下阻止任何内容,第二个允许某些设备。
DBX12

这在启动系统时插入(例如键盘)时有效。但是,如果已连接键盘并重新启动,则在操作系统重新启动后,键盘便可以工作。拔下键盘,然后重新插入,键盘无法正常工作。在启动引导设备之前,可以在较低的级别上运行此规则吗?
ScottN

3

(这可能会更好,但我缺乏要点,因此将其扩展为答案)

我是来这里寻找如何允许所有USB设备的,除了通过供应商和产品ID禁用特定的USB设备。 如何使用udev禁用USB声音设备,可以在0d8c:000c示例中找到答案。

创建/etc/udev/rules.d/disable-usb-device.rules

ACTION=="add", ATTR{idVendor}=="0d8c", ATTR{idProduct}=="000c", RUN="/bin/sh -c 'echo 0 >/sys/\$devpath/authorized'"

以下与RUN=vs相比RUN+=,答案和注释之间存在差异,我尝试了前者,但效果很好。

我期望dmesg或lusb报告的方式有所不同,但是它们都显示未授权设备的枚举与以前一样,但是其他将自动启动的进程/模块似乎没有运行,这是理想的效果。cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(例如,可以在dmesg中找到1-2.2 ...)表明0放置在正确的位置。


我不知道udev之间是否有一些更改,但是如今属性是ATTRS(多个)命名的,而不是ATTR当我使用来查询设备时命名的udevadm
Baptiste Mille-Mathias
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.