пятница, 8 апреля 2016 г.

Linux Ubuntu 14.04 LTS udev блокирование флешек на десктопе предприятия

Блокирование будет происходить через udev.
Man udev
Сделано по этому материалу.
Для того, чтобы заблокировать все USB, добавляем правило /etc/udev/rules.d/10-disable-usb.rules

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/authorized'"

Но некоторые устройства - USB-сканер, HID устройства (мышь клавиатура) нам нужно разрешить.

Для сканера нужно нужно найти idVendor idProduct. Для этого запускаем в консоли:

udevadm monitor --environment --udev

и подключаем сканер и видим подобное:


# udevadm monitor --environment --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [7963.929429] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
ACTION=add
BUSNUM=001
DEVNAME=/dev/bus/usb/001/014
DEVNUM=014
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2
DEVTYPE=usb_device
ID_BUS=usb
ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_2
ID_MODEL=CanoScan
ID_MODEL_ENC=CanoScan
ID_MODEL_ID=190e
ID_PATH=pci-0000:00:14.0-usb-0:2
ID_PATH_TAG=pci-0000_00_14_0-usb-0_2
ID_REVISION=0704
ID_SERIAL=Canon_CanoScan
ID_USB_INTERFACES=:ffffff:
ID_VENDOR=Canon
ID_VENDOR_ENC=Canon
ID_VENDOR_FROM_DATABASE=Canon, Inc.
ID_VENDOR_ID=04a9
MAJOR=189
MINOR=13
PRODUCT=4a9/190e/704
SEQNUM=2347
SUBSYSTEM=usb
TAGS=:seat:uaccess:
TYPE=255/255/255
USEC_INITIALIZED=63922101
libsane_matched=yes

Здесь можно увидеть ID сканера (04a9:190e)
ID_VENDOR_ID=04a9
ID_MODEL_ID=190e

Чтобы  посмотреть атрибуты для написания правила, удобнее запустить такую команду:

udevadm info -a -p /devices/pci0000:00/0000:00:14.0/usb1/1-2

где  /devices/pci0000:00/0000:00:14.0/usb1/1-2 взят из предыдущей команды
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2

Вот ее вывод, он древовидный, смотреть для looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2':

#udevadm info -a -p /devices/pci0000:00/0000:00:14.0/usb1/1-2

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2':
    KERNEL=="1-2"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{bDeviceSubClass}=="ff"
    ATTR{bDeviceProtocol}=="ff"
    ATTR{devpath}=="2"
    ATTR{idVendor}=="04a9"
    ATTR{speed}=="480"
    ATTR{bNumInterfaces}==" 1"
    ATTR{bConfigurationValue}=="1"
    ATTR{bMaxPacketSize0}=="64"
    ATTR{busnum}=="1"
    ATTR{devnum}=="19"
    ATTR{configuration}==""
    ATTR{bMaxPower}=="500mA"
    ATTR{authorized}=="1"
    ATTR{bmAttributes}=="a0"
    ATTR{bNumConfigurations}=="1"
    ATTR{maxchild}=="0"
    ATTR{bcdDevice}=="0704"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{quirks}=="0x0"
    ATTR{version}==" 2.00"
    ATTR{urbnum}=="1580"
    ATTR{ltm_capable}=="no"
    ATTR{manufacturer}=="Canon"
    ATTR{removable}=="removable"
    ATTR{idProduct}=="190e"
    ATTR{bDeviceClass}=="ff"
    ATTR{product}=="CanoScan"

Для правила будем брать атрибуты
ATTR{idVendor}=="04a9"
ATTR{idProduct}=="190e"

Итоговое второе правило:

ACTION=="add", SUBSYSTEMS=="usb", ATTR{idVendor}=="04a9", ATTR{idProduct}=="190e", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

Далее нужно разрешить HID устройства. Будем разрешать по
ATTR{product}=="USB Optical Mouse|USB Keyboard"

Хотя есть исключения - брендовые продукты
ATTR{product}=="HP Basic USB Keyboard"

Итоговое третье правило:

ACTION=="add", SUBSYSTEMS=="usb", ATTR{product}=="USB Optical Mouse|USB Keyboard", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

Чтобы заработали правила:

udevadm control --reload-rules

Выполняем команду, проверяем - все работает. Перегружаемся, проверяем - не работает (
Если промониторить udevadm monitor --environment --udev
то видно, что устройство даже не появляется.А дело в том что при загрузке блокируется hub и ниже по дереву уже устройства не доступны. Поэтому нужно после блокировки добавить правило:

ACTION=="add", ATTR{bDeviceClass}=="09", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

Номер класса можно посмотреть здесь

Комментариев нет:

Отправить комментарий