Я хочу отключить USB-устройства на основе идентификатора поставщика в среде Linux. Я хочу разрешить только определенные USB-устройства на основе идентификатора производителя.
Я хочу отключить USB-устройства на основе идентификатора поставщика в среде Linux. Я хочу разрешить только определенные USB-устройства на основе идентификатора производителя.
Ответы:
Вы можете создать правило udev, которое по умолчанию отключает устройства, но включает определенные по идентификатору производителя. Создайте файл /etc/udev/rules.d/01-usblockdown.rules
, содержащий правило для отключения устройств:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"
И затем правила для включения устройств, которые вы хотите разрешить (вы можете использовать, ATTR{idVendor}
чтобы получить по ID поставщика):
ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
Смотрите "Блокировка Linux с помощью UDEV" для получения дополнительной информации.
(это могло бы быть лучше в качестве комментария, но мне не хватает баллов, поэтому развернул его в ответ)
Я пришел сюда в поисках того, как разрешить все USB-устройства, кроме отключения конкретного устройства по поставщику и идентификатору продукта. Как отключить звуковое устройство usb с помощью udev отвечает на пример 0d8c: 000c.
Создать /etc/udev/rules.d/disable-usb-device.rules
:
ACTION=="add", ATTR{idVendor}=="0d8c", ATTR{idProduct}=="000c", RUN="/bin/sh -c 'echo 0 >/sys/\$devpath/authorized'"
Существует несоответствие между ответом и комментарием ниже с « RUN=
против» RUN+=
, я попробовал первый, и он работал нормально.
Я ожидал, что dmesg или lusb сообщат по-разному, но они оба показывают, что неавторизованное устройство перечисляется так же, как и раньше, но другие процессы / модули, которые запускались автоматически, похоже, не работают, что было желаемым эффектом. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized
(1-2.2 ... например, который можно найти в dmesg) показывает, что 0 был помещен в правильном месте.
ATTRS
(во множественном числе), а не ATTR
когда я запрашиваю устройства udevadm
.