udev가 대용량 저장소를 허용하고 다른 모든 것을 거부하도록 하려면 어떻게 해야 합니까?

udev가 대용량 저장소를 허용하고 다른 모든 것을 거부하도록 하려면 어떻게 해야 합니까?

USB 대용량 저장 장치를 허용하지만 다른 장치(키보드, 마우스 등)는 거부하는 udev 규칙을 작성하려고 합니다. 나는 이것을 온라인에서 찾았습니다:

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 비트이므로 거기에 무엇을 넣을지 알 수 없습니다. 공급업체/제품 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 저장소"를 얻으려면 한 수준 위로 올라가야 합니다. 규칙에서 그렇게 할 수 있는 방법이 있나요?

관련 정보