3.4.15.6.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"
Перезапустить правила:
udevadm control --reload-rules
Дата последнего изменения: 19.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.