Немного о запрете подключения и запрете автомонтирования USB-устройств

Бывают ситуации, когда временно требуется или полностью запретить подключение всех USB-устройств или просто запретить их автомонтирование, а иногда разрешить автомонтирование только определенного USB-устройства ... конечно, это бывает не так часто и не у всех, но может кому то будет и интересно, как это можно осуществить. Опишу в кратце

1. Полный запрет на подключение всех USB-устройств - в основном защита от более продвинутых юзеров, которым разрешено sudo
(USB-устройства не возмножно будет смонтировать даже в ручную - модуль usb_storage будет не рабочий)
Создаем файл /etc/modprobe.d/usb-storage.conf
и прописываем в нем строку
install usb-storage /bin/true
Требуется выполнить reboot ...
Эта фича выполняет фальшивую загрузку модуля usb_storage при вставке USB-накопителя в порт - команда /bin/true ничего не делает и возвращает статус 0.
Согласно спецификации USB флэшка будет определяться системой, то есть будет видна в lsusb, а вот lsblk и пр. ее не покажут.
В принципе можно просто прописать, а пока нет необходимости, закомментировать, что я и сделал.
cat /etc/modprobe.d/usb-storage.conf
#install usb-storage /bin/true

2. Полный запрет на автомонтирование всех USB-устройств - но можно смонтировать в ручную, если разрешено использование sudo
(в основном защита от простых юзеров, которым не разрешено sudo или же не умеют монтировать в ручную)
Создаем файл /etc/udev/rules.d/99-usb.rules
и прописываем в нем правило
ENV{ID_USB_DRIVER}=="usb-storage",ENV{UDISKS_IGNORE}="1"
Чтобы заработало без перегрузки, выполняем - sudo udevadm control --reload-rules

3. Автомонтирование только определенных USB-устройств
Создаем файл /etc/udev/rules.d/99-usb.rules, как в п. 2
и прописываем в нем два правила (две строчки)
1-ое - то же правило, что и при полном запрете автомонтирования, то есть как в п. 2
ENV{ID_USB_DRIVER}=="usb-storage",ENV{UDISKS_IGNORE}="1"
2-ое - правило, идентифицирующее USB-устройство, которое должно автомонтироваться, например, по его серийному номеру (38QFP30TV3EYT48U)
ATTRS{serial}=="38QFP30TV3EYT48U",ENV{UDISKS_IGNORE}="0"
Но мне больше нравится немного другой способ, состояший всего из одного правила
ENV{ID_SERIAL_SHORT}!="38QFP30TV3EYT48U", ENV{UDISKS_IGNORE}="1"
Иногда ID_SERIAL_SHORT отсутствует, тогда можно, например, использовать длинный номер ID_SERIAL
ENV{ID_SERIAL}!="JetFlash_Transcend_16GB_38QFP30TV3EYT48U-0:0", ENV{UDISKS_IGNORE}="1"
Чтобы узнать номера устройства вставляем нужную флэшку и смотрим вывод
udevadm info --query=env --name=/dev/sdb | grep ID_SERIAL
ID_SERIAL=JetFlash_Transcend_16GB_38QFP30TV3EYT48U-0:0
ID_SERIAL_SHORT=38QFP30TV3EYT48U
Чтобы заработало без перегрузки, выполняем sudo udevadm control --reload-rules
Ошибки не исчезают с опытом - они просто умнеют
vasek, отлично, мне кажется, лучше в блоги.
anode
в блоги
думал об этом, но слишком маленький объем ... да, наверное, и мало кому это и нужно.
Ошибки не исчезают с опытом - они просто умнеют
anode
отлично, мне кажется, лучше в блоги.
Поддерживаю!
У меня уже специальная папка есть для Ваших материалов. Спасибо.
Перенес. Информация полезная. Считаю, что в блогах ей самое место.
vasek
anode
в блоги
думал об этом, но слишком маленький объем … да, наверное, и мало кому это и нужно.
За-то, лаконично и по делу.
Спасибо!
Спасибо, полезно. А как насчет запрета подключения всяких левых usb-клавиатур или флешек, которые притворяются клавиатурами или сетевыми адаптерами? Несколько лет назад писали про такую потенциальную дыру, кажется, называется Bad USB.
ACTION    != "add", GOTO = "usblist_rules_end" #если  нету действия add то сразу переходим к label end
SUBSYSTEM == "usb", GOTO = "usblist_usb_rules" #если действие относится к usb переходим к label rules
GOTO="usblist_rules_end" #если ничего не словили то тоже сразу к label end
LABEL="usblist_usb_rules" #объявление раздела с правилами label rules

# Bus 001 Device 002: ID 8087:8001 Intel Corp.
ATTR{idVendor}  == "8087", ATTR{idProduct}  == "8001",  GOTO = "usblist_rules_end" # правило, если его словило то сразу на label end, в таком же ключе остальные пишутся для каждого устройства

# если не сработало ни одно правило в разделе, то добавляем нужный атрибут, в частности запрет авторизации устройста.
ATTR{authorized}="0"
LABEL="usblist_rules_end"
ну и объявление label end
Ошибки в тексте-неповторимый стиль автора©
Здорово. А можно немножко комментариев? А то в целом понятно, но не очень)) Вот GOTO например, это куда и зачем?
Koluchka
кажется, называется Bad USB
BadUSB - способ внедрения вредоносного кода, основанный на уязвимости USB-устройств … простым языком, прошивается микроконтроллер, например, флэшка, которая при инициализации будет выдавать себя за другое устройство.
Об этом много писали раньше, но это не так уж просто и осуществить - не каждый контроллер можно перепрошить, но если даже и получится перепрошить, то встает вопрос - чем перепрошить? - нужно писать свой код, под конкретные цели … и не забываем, что производители не очень то раскрывают свои программы для этих устройств …
Отсюда вывод - обычным юзерам бояться нечего, но все-таки рекомендуется относится с настороженностью к незнакомым USB-устройствам и стараться не оставлять работающий компьютер без присмотра ... но это обычные правила, которые нужно соблюдать всегда.
В свое время этот вопрос был задан спецам компании Касперского - они ответили близко к этому, привожу часть ответа
Я не говорю, что подобные сценарии невозможны, но они требуют очень хорошей подготовки злоумышленников, тщательно продуманного плана действий и, главное, удачного стечения обстоятельств.
Вероятность заражения минимальна, так как необходимо подключить перепрошитое устройство к компьютеру жертвы. Кроме того, системный администратор может ограничить появление неизвестных устройств на компьютере, что позволит заблокировать, например, вторую клавиатуру.
Защита на уровне hard и soft от этого - способов много, это и отключение лишних USB-портов это и правила UDEV это и правила polkit и др.
Кстати в Archlinux имеется пакет usbguard и описание в Wiki … но сам его не пробовал.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.