Как отключить USB-устройства на основе идентификатора поставщика в среде Linux?


11

Я хочу отключить USB-устройства на основе идентификатора поставщика в среде Linux. Я хочу разрешить только определенные USB-устройства на основе идентификатора производителя.


Как заблокировать USB / PEN DRIVE в Linux (kali linux) grprajapat.blogspot.in/2014/09/…

У меня есть один конкретный поставщик: идентификатор устройства, для которого я хочу отключить cdc_acm. С тех пор я превратил это в отдельный вопрос .
— Мирабилось

Ответы:


10

Вы можете создать правило 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" для получения дополнительной информации.


Достаточно ли приведенной выше команды, или мы должны выполнить любой триггер udevadm, чтобы получить эффект этого.
— Subbarao

Привет Стефан, мы должны добавить оба правила, чтобы разрешить определенный Pendrive?
— Subbarao

@subbarao Да, вы должны добавить оба правила, первое блокирует все по умолчанию, второе разрешает определенные устройства.
— DBX12

Это работает, когда вы подключаете, скажем, клавиатуру, после загрузки системы. Но если клавиатура подключена и вы перезагружаетесь, клавиатура работает после перезагрузки ОС. Отключите клавиатуру, а затем снова подключите, клавиатура не работает должным образом. Есть ли область более низкого уровня, на которой это правило может быть выполнено до активации загрузочных устройств?
— ScottN

3

(это могло бы быть лучше в качестве комментария, но мне не хватает баллов, поэтому развернул его в ответ)

Я пришел сюда в поисках того, как разрешить все 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 был помещен в правильном месте.


Я не знаю, были ли какие-то промежуточные изменения в udev, но в настоящее время атрибуты именуются ATTRS(во множественном числе), а не ATTRкогда я запрашиваю устройства udevadm.
— Креститель Милле-Матиас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.