我怎样才能让 udev 接受大容量存储并拒绝其他一切?

我怎样才能让 udev 接受大容量存储并拒绝其他一切?

我正在尝试编写一个 udev 规则来允许 USB 大容量存储设备,但拒绝其他任何设备(键盘、鼠标等)。我在网上找到了这个:

ACTION!="add", GOTO="deauthorize_end"
SUBSYSTEM!="usb", GOTO="deauthorize_end"
TEST!="authorized", GOTO="deauthorize_end"

## make hubs deauthorize all devices by default
TEST=="authorized_default", ATTR{authorized_default}="0", GOTO="deauthorize_end"

## CHECK FOR USB MASS STORAGE HERE
SOMETHING=="something", ENV{valid}="1"


## authorize matched devices, warn about the rest
ENV{valid}=="1", ENV{valid}="", ATTR{authorized}="1", GOTO="deauthorize_end"
RUN+="/usr/local/bin/usb-unauth $devpath"
LABEL="deauthorize_end"

我将其保存在 /etc/udev/rules.d/99-usb-unauth.rule 中 - 我的问题是检查 USB 大容量存储位,我不知道要放在那里的内容。该规则运行良好,因为我可以将其他内容放入其中,例如供应商/产品 ID,并且它们运行良好。

我尝试过 SUBSYSTEM=="block"、SUBSYSTEMS=="block" 以及发现使用的各种其他键,udevadm info -a -p $(udevadm info -q path -n /dev/myDevNode)但似乎没有任何东西可以让它接受驱动器。

我究竟做错了什么?我可以匹配什么来捕捉全部大容量存储设备?它需要是全部,而不仅仅是特定的一个。

编辑:查看 udev 日志,我的规则似乎运行得太快:

set children_max to 16
validate module index
Check if link configuration needs reloading.
seq 2693 queued, 'add' 'usb'
seq 2693 forked new worker [26127]
seq 2693 running
no db file to read /run/udev/data/c189:224: No such file or directory
device 0xb77b68e0 has devpath '/devices/pci0000:00/0000:00:1d.0/usb2/2-1'
device 0xb77b6c90 has devpath '/devices/pci0000:00/0000:00:1d.0/usb2'
device 0xb77b7040 has devpath '/devices/pci0000:00/0000:00:1d.0'
device 0xb77b72c8 has devpath '/devices/pci0000:00'
IMPORT builtin 'usb_id' /lib/udev/rules.d/50-udev-default.rules:9
IMPORT builtin 'hwdb' /lib/udev/rules.d/50-udev-default.rules:9
MODE 0664 /lib/udev/rules.d/50-udev-default.rules:41
ATTR '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/authorized' writing '1' /etc/udev/rules.d/99-usb-deauth.rules:21

当然,我的规则,从 99-... 开始不应该运行第三?我想我需要它稍后运行。

另一个编辑:所以我认为问题是,一旦我们通过SUBSYSTEM!="usb", GOTO="deauthorize_end"(即 SUBSYSTEM==“usb”),该规则的其余部分就会被评估,我可以从 udevadm 看到,此时 usb 子系统只是“USB”要获得“USB 存储”,它需要上升一级。有没有办法按照规则做到这一点?

相关内容