我想在 Linux 环境中根据供应商 ID 禁用 USB 设备。我想根据供应商 ID 只允许特定的 USB 设备。
Sté*_*las 16
您可以制定一个 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'"
Run Code Online (Sandbox Code Playgroud)
然后规则来启用您想要允许的设备(您可以使用ATTR{idVendor}获取供应商 ID):
ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅“使用 UDEV 锁定 Linux”。
(这可能作为评论更好,但我缺乏要点,因此将其扩展为答案)
我来这里是为了寻找除了通过供应商和产品 ID 禁用特定设备之外,如何允许所有 USB 设备。 How to disable a usb sound device with udev在 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 Code Online (Sandbox Code Playgroud)
答案与下面与RUN=vs.的评论之间存在差异RUN+=,我尝试了前者,效果很好。
我期待 dmesg 或 lusb 报告不同,但它们都显示未经授权的设备像以前一样被枚举,但其他自动启动的进程/模块似乎没有运行,这是预期的效果。cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(例如,可以在 dmesg 中找到的 1-2.2...)表明 0 放在正确的位置。
这在 Ubuntu 20.04 上对我有用:
$ cat /etc/udev/rules.d/81-elan-fingerprint.rules
# ID 04f3:0c28 Elan Microelectronics Corp. ELAN:Fingerprint should be disabled
ACTION=="add", ATTR{idVendor}=="04f3", ATTR{idProduct}=="0c28", RUN="/bin/sh -c 'echo 1 >/sys/\$devpath/remove'"
Run Code Online (Sandbox Code Playgroud)
这使得 USB 设备不可用,因为它一插入就会被删除,删除“ATTR {idProduct} ==“0c28”,”应该对该供应商的所有设备执行相同的操作。