Como posso fazer o udev aceitar o armazenamento em massa e rejeitar todo o resto?

Como posso fazer o udev aceitar o armazenamento em massa e rejeitar todo o resto?

Estou tentando escrever uma regra do udev para permitir dispositivos de armazenamento em massa USB, mas rejeitar qualquer outra coisa (teclado, mouse, etc.). Encontrei isto on-line:

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"

Eu salvei isso em /etc/udev/rules.d/99-usb-unauth.rule - meu problema é o bit CHECK FOR USB MASS STORAGE, não consigo descobrir o que colocar lá. A regra está funcionando bem porque posso colocar outras coisas lá, como IDs de fornecedor/produto, e elas funcionam bem.

Eu tentei SUBSYSTEM=="block", SUBSYSTEMS=="block" e todos os tipos de outras chaves encontradas, udevadm info -a -p $(udevadm info -q path -n /dev/myDevNode)mas nada parece fazê-lo aceitar a unidade.

O que estou fazendo de errado? O que posso combinar para pegartodosdispositivos de armazenamento em massa? Precisa ser tudo, não apenas um específico.

Editar: Olhando para o log do udev, parece que minha regra está sendo executada muito cedo:

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

Certamente minha regra, começando com 99-... não deveria ser executadaterceiro? Acho que preciso que seja executado mais tarde.

Outra edição: Então acho que o problema é que assim que passamos SUBSYSTEM!="usb", GOTO="deauthorize_end"(ou seja, SUBSYSTEM=="usb") o resto desta regra é avaliado, e posso ver no udevadm que nesse ponto o subsistema usb é apenas "USB" para obter "armazenamento USB", ele precisa subir um nível. Existe alguma maneira de fazer isso a partir da regra?

informação relacionada