Я пытаюсь написать правило 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 - моя проблема в бите CHECK FOR USB MASS STORAGE, я не могу понять, что туда поместить. Правило работает нормально, потому что я могу поместить туда другие вещи, такие как идентификаторы поставщиков/продуктов, и они работают нормально.
Я пробовал 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-storage", нужно подняться на один уровень выше. Есть ли способ сделать это из правила?