8.2 Ограничение доступа к USB накопителям

Алгоритм создания белого списка USB-флеш-накопителей состоит из 2 этапов:

Вариант 1:

  1. Запрет монтирования всех USB-флеш-накопителей
  2. Разрешение монтирования некоторых устройств

Вариант 2:

  1. Разрешение монтирования некоторых устройств
  2. Запрет монтирования всех иных USB-флеш-накопителей

Первый этап – запрет автомонтирования

Вариант с параметром UDISKS_IGNORE

Для отключения автомонтирования USB-флеш-накопителей нужно будет создать правило для udev.

Создаем файл /etc/udev/rules.d/99-usb.rules

nano /etc/udev/rules.d/99-usb.rules

со следующим содержанием:

ENV{ID_USB_DRIVER}=="usb-storage",ENV{UDISKS_IGNORE}="1"

Флаг ENV{UDISKS_IGNORE} отвечает за «Игнорировать ли устройство». “0” – false, “1” — true

Для того, чтобы новое правило вступило в силу, нужно ввести команду обновления правил udev

sudo udevadm control --reload-rules

После этого, можете проверить и подключить USB-флеш-накопитель, как результат, он не откроется.

Вариант с изменением параметра authorized

Для отключения автомонтирования USB-флеш-накопителей нужно будет создать правило для udev и исполняемый скрипт запрета монтирования USB-флеш-накопителей.

Создадим скрипт:

nano /usr/bin/remove_usb.sh
#!/bin/bash
var=$1
var2=$(echo $1 | sed 's/.*usb[[:digit:]]//' | sed 's/[a-z].*//'| sed 's/[0-9]-[0-9].//')
echo 0 > '/sys/bus/usb/devices'$var2'authorized'

Измените права на скрипт:

chmod +x /usr/bin/remove_usb.sh

Параметр authorized отвечает за монтирование USB-флеш-накопителя в момент подключения к ПК.

Создаем файл /etc/udev/rules.d/99-usb.rules

nano /etc/udev/rules.d/99-usb.rules

со следующим содержанием:

ENV{ID_USB_DRIVER}=="usb-storage",RUN+="/bin/sh -c '/usr/bin/remove_usb.sh $devpath'"

Для того, чтобы новое правило вступило в силу, нужно ввести команду обновления правил udev

sudo udevadm control --reload-rules

После этого, можете проверить и подключить USB-флеш-накопитель, как результат, он не откроется.

Примеры выбора устройств по определенным свойствам

Для создания белого списка USB-флеш-накопителей, нужно знать атрибуты накопителя.

1) Определяем нашу флешку:

ls -l /dev/sd*

brw-rw---- 1 root disk 8, 0 июн 30 12:59 /dev/sda 

brw-rw---- 1 root disk 8, 1 июл 22 12:59 /dev/sda1 

brw-rw---- 1 root disk 8, 2 июл 22 12:59 /dev/sda2 

brw-rw---- 1 root disk 8, 3 июн 30 12:59 /dev/sda3 

brw-rw---- 1 root disk 8, 16 июл 22 13:43/dev/sdb # нужная нам строка

brw-rw---- 1 root disk 8, 17 июн 30 13:43 /dev/sdb1 

2) Смотрим атрибуты:

udevadm info -a -p /sys/block/sdb #символы после sd* вводите в соответствии с вашим выводом $ ls -l /dev/sd*

Вариант составления белого списка по первому варианту

Выборка по серийному номеру устройства

ATTRS{serial}=="04GS1F3LBIBDWU05",ENV{UDISKS_IGNORE}="0"

Выборка по названию модели. Точное название смотрите в выводе команды

udevadm info -a -p /sys/block/sdb
ATTRS{model}=="Silicon-Power8G ",ENV{UDISKS_IGNORE}="0"

Выборка по максимальному потреблению тока

ATTRS{bMaxPower}=="200mA",ENV{UDISKS_IGNORE}="0"

Конечный вариант файла /etc/udev/rules.d/99-usb.rules:

ENV{ID_USB_DRIVER}=="usb-storage",ENV{UDISKS_IGNORE}="1"
ATTRS{serial}=="04GS1F3LBIBDWU05",ENV{UDISKS_IGNORE}="0"
ATTRS{model}=="Silicon-Power8G ",ENV{UDISKS_IGNORE}="0"
ATTRS{bMaxPower}=="200mA",ENV{UDISKS_IGNORE}="0"

Для того, чтобы новое правило вступило в силу, нужно ввести команду обновления правил udev

sudo udevadm control --reload-rules

Полный список атрибутов, по которым можно осуществить выборку, находится в выводе команды:

udevadm info -a -p /sys/block/sdb

Вариант составления списка по второму варианту

Выборка по серийному номеру устройства

ATTRS{serial}=="0DM97KDQ", GOTO="dont_remove_usb"

Выборка по названию модели. Точное название смотрите в выводе команды

udevadm info -a -p /sys/block/sdb
ATTRS{model}=="Transcend 16GB ", GOTO="dont_remove_usb"

Для удобства, когда полный список параметров устройства известен, можно производить отбор по конкретному параметру:

udevadm info -a -p /sys/block/sdb | grep "ATTRS{serial}"
udevadm info -a -p /sys/block/sdb | grep "ATTRS{model}"

Конечный вариант файла /etc/udev/rules.d/99-usb.rules:

ACTION!="add", GOTO="dont_remove_usb" 
ENV{ID_USB_DRIVER}!="usb-storage", GOTO="dont_remove_usb" 
ATTRS{model}=="Transcend 16GB ", GOTO="dont_remove_usb" 
ATTRS{serial}=="0DM97KDQ", GOTO="dont_remove_usb" 
ENV{ID_USB_DRIVER}=="usb-storage", RUN+="/bin/sh -c '/usr/bin/remove_usb.sh $devpath'" 
LABEL="dont_remove_usb"

Логика данного правила отлична от первого варианта. В 1 варианте происходило блокирование сразу всех usb флеш-накопителей  и лишь потом разграничение на белый список шло. В данном варианте сначала происходит разграничение на белый список.  Только потом добавление устройства в черный список. Такое действие связано с тем, что параметр authorizedпоявляется в момент монтирования и если его изменить в 0, то далее он становится недоступен. Соответственно, сначала требуется проверить подходит флешка под белый список и если да, то разрешить ей монтирование.

Для того, чтобы новое правило вступило в силу, нужно ввести команду обновления правил udev

sudo udevadm control --reload-rules

Полный список атрибутов, по которым можно осуществить выборку, находится в выводе команды:

udevadm info -a -p /sys/block/sdb

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

Print Friendly, PDF & Email