8.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

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email