Вопрос или проблема
Я хочу заблокировать все USB-устройства, кроме USB-клавиатуры и USB-мишки, с помощью правил udev? Цель – ограничить пользователей в подключении внешних накопителей (флеш-накопителей, внутреннего хранилища телефонов и хранилища устройств iOS).
Чтобы ограничить пользователей в передаче данных на эти устройства с машины Ubuntu версии 16.04 и выше.
Также ограничить мобильный протокол передачи MTP для ограничения передачи фотографий.
Войдите в машину с правами sudo в терминале.
# sudo -i
Список USB-портов:
# lsmod | grep usb
Отредактируйте файл blacklist.conf
# sudo vi /etc/modprobe.d/blacklist.conf
blacklist usb_storage
blacklist uas
blacklist usbhid
# sudo vi /etc/rc.local/
modprobe -r usb_storage
modprobe -r uas
modprobe -r usbhid
Сохраните и перезагрузите машину.
Но каким-то образом мобильное хранилище управляет подключением хранилища к машине.
Поэтому сейчас пробую правила udev, я пробовал следующее для всех портов (usb/1-3, usb1/1-3…) но это блокирует и клавиатуру, и мышь.
# echo 0 > /sys/bus/usb/devices/1-3/authorized
Другой вариант, который я пробовал:
/etc/udev/rules.d/01-usblockdown.rules
Содержимое скрипта следующее:
# Скрипт Аделья Креншоу
# С информацией от Майкла Миллера, Инаки Переса-Гонсалеса и VMWare
# По умолчанию отключить.
# ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/authorized'"
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"
# Включить устройства-репитеры. Может быть, существует лучший способ, чем это.
ACTION=="add", ATTR{bDeviceClass}=="09", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
# Другие вещи, которые нужно включить
ACTION=="add", ATTR{idVendor}=="046d", ATTR{idProduct}=="0809", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
ACTION=="add", ATTR{serial}=="078606B90DD3", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
ACTION=="add", ATTR{product}=="802.11 n WLAN", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
# ACTION=="add", ATTR{idVendor}=="413c", ATTR{idProduct}=="2106", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
Это также блокирует USB-клавиатуру и мышь.
Просто подсказки:
/etc/modprobe.d/blacklist.conf .. blacklist
не работает для всех типов драйверов. Некоторые из них не являются внешними модулями, и для их работы необходимо передать специальный аргумент через/etc/default/grub .. GRUB_CMDLINE_LINUX_DEFAULT
.usbhid
– это основной драйвер USB HID (устройства человеко-машинного интерфейса) для клавиатуры, мыши и джойстика. Лучше его убрать. Хорошо, что у вас все еще есть доступ к машине. Лучше, если вы подготовите вход по OpenSSH на всякий случай.- Проверьте
lsusb -t
иudevadm info -a ...
, когда подключены только мышь/клавиатура. Соберите список всех активных USB-драйверов. Я ожидаю увидеть: USB1/2/3-хабы, мышь, клавиатуру, кардридер SD, Bluetooth. - Разработайте похожее правило, как в посте для отвязывания драйвера, позволяя, вероятно, только USB-хабы и USB HID-драйверы.
Если вы столкнетесь с блокировкой, обновите вопрос с собранной информацией, дайте знать в комментариях.
Попробуйте это
ctrl + alt + t
Введите: sudo nautilus n /usr/lib/gvfs/
Нажмите enter
Введите свой пароль
Откроется одна страница, на ней проверьте gvfsd-mtp
, кликните правой кнопкой мыши на этом
Снимите галочку (Разрешить выполнение файла как программы)
Закройте это и в терминале введите init 6
, нажмите enter
Система перезагрузится и проверьте сейчас
Ответ или решение
Для блокировки всех USB-устройств, кроме USB-клавиатуры и USB-мыши, на системах Ubuntu 16.04 и выше, можно использовать правила udev
. Следуя нижеприведённым шагам, вы сможете настроить систему так, чтобы она не разрешала подключение внешних носителей, таких как флеш-накопители и устройства MTP, при этом оставив работу клавиатуры и мыши без изменений.
Шаги по настройке udev для блокировки USB-устройств
-
Откройте терминал:
НажмитеCtrl + Alt + T
, чтобы открыть терминал. -
Получите информацию об устройствах:
Выполните команду для получения списка подключённых USB-устройств:lsusb
Это позволит вам идентифицировать устройства и их идентификаторы
idVendor
иidProduct
, необходимых для создания правил. -
Создайте правило udev:
Для создания правил необходимо создать файл в директории/etc/udev/rules.d/
. Имя файла может быть, например,99-usb-restrict.rules
:sudo nano /etc/udev/rules.d/99-usb-restrict.rules
-
Добавьте правила:
В редакторе добавьте следующие строки:# Блокируем все устройства по умолчанию ACTION=="add", SUBSYSTEM=="usb", ATTR{authorized}="0" # Разрешаем USB-клавиатуру ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c31c", ATTR{authorized}="1" # Замените idVendor и idProduct на ваши значения для вашей клавиатуры # Разрешаем USB-мышь ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c52b", ATTR{authorized}="1" # Замените idVendor и idProduct на ваши значения для вашей мыши
Измените
idVendor
иidProduct
на соответствующие значения для ваших устройств (их можно получить из командыlsusb
). -
Сохраните и закройте редактор:
НажмитеCtrl + O
, затемEnter
, затемCtrl + X
, чтобы завершить редактирование. -
Примените созданные правила:
Чтобы обновить изменения, выполните команду:sudo udevadm control --reload-rules
-
Перезагрузите систему:
Для того чтобы изменения вступили в силу, перезагрузите компьютер:sudo reboot
Дополнительные меры
-
Отключение протокола MTP:
Для предотвращения подключения мобильных устройств с использованием протокола MTP вы можете отключить рабочие процессы, отвечающие за это. В терминале выполните:sudo systemctl stop gvfs-daemon sudo systemctl disable gvfs-daemon
-
Блокировка дополнительных модулей:
Если вы хотите дополнительно заблокировать другие модули, откройте файл/etc/modprobe.d/blacklist.conf
и добавьте:blacklist usb-storage blacklist uas
Это предотвратит загрузку драйверов, относящихся к USB-накопителям.
Заключение
С помощью приведённых выше шагов вы сможете эффективно блокировать все USB-устройства, за исключением клавиатур и мышей, что значительно повысит уровень безопасности вашей системы. Обязательно проверяйте правильность введённых параметров idVendor
и idProduct
, чтобы не потерять функциональность ваших ввода устройств.