2.12.6 Ограничение доступа USB устройств по defines class code
Существует большое количество устройств, имеющих разный USB defines class code. Для того что бы разрешить подключение определенного класса устройств потребуется применить следующий алгоритм:
1) Создать правило, в котором прописаны разрешенные устройства, а остальные блокируются:
nano /etc/udev/rules.d/99-usb-bInterfaceClass.rules
Содержимое правила на примере классов для token, HID, audio и video устройств:
# Allow all TOKEN devices ATTR{bInterfaceClass}=="0b",ACTION=="add",GOTO="usb_rules_end" # Allow all с ATTR{bInterfaceClass}=="03",ACTION=="add",GOTO="usb_rules_end" # Allow all AUDIO devices ATTR{bInterfaceClass}=="01",ACTION=="add",GOTO="usb_rules_end" # Allow all VIDEO devices ATTR{bInterfaceClass}=="0e",ACTION=="add",GOTO="usb_rules_end" SUBSYSTEM=="usb",ACTION=="add",RUN+="/bin/sh -c '/usr/bin/reject_usb_bInterfaceClass.sh $devpath'" LABEL="usb_rules_end"
2) Создать скрипт, изменяющий атрибут authorized для определенного устройства:
nano /usr/bin/reject_usb_bInterfaceClass.sh
Содержимое скрипта:
#!/bin/bash var=$1 var2=$(echo $1 | sed 's/.*usb[[:digit:]]//' | sed 's/[a-z].*//'| sed 's/[0-9]-[0-9].//') var3=$(echo $var2 | grep '^/[0-9]-[0-9]$') var4=$(echo $var2 | grep '^/[0-9]-[0-9].[0-9]$') if [ -z "$var3" ] && [ -z "$var4" ]; then echo 0 > '/sys/bus/usb/devices'$var2'/authorized' fi
Сделайте скрипт исполняемым:
chmod +x /usr/bin/reject_usb_bInterfaceClass.sh
Перезапустите правила udev:
sudo udevadm control --reload-rules
HUB устройства
Есть устройства , которые системой определяются как HUB. В момент редактирования правил и перезагрузки udev на HUB устройства, которые находятся в системном блоке/кейсе, влияние оказано не будет, так как они не переподключаются. Зато при перезагрузке ОС они заблокируются и в итоге все подключенные к ним устройства ниже по дереву, тоже будут заблокированы. Для корректного редактирования устройств подключенных через HUB требуется в правилах разрешить:
DRIVER=="hub",ACTION=="add",GOTO="end_usb_rules"
либо:
ATTR{bInterfaceClass}=="09",ACTION=="add",GOTO="usb_rules_end"
Перезапустить правила:
sudo udevadm control --reload-rules
Дата последнего изменения: 09.08.2022
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.