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

Как это работает

Ядро Linux для каждого USB-устройства хранит признак authorized. Пока он равен нулю, устройство видно в шине, но драйверы к нему не привязываются, и работать с ним нельзя. USBGuard перехватывает события подключения через netlink, сверяет устройство с набором правил и выставляет признак. Демон не шифрует данные и не проверяет содержимое накопителя: это контроль авторизации, дополнение к шифрованию дисков.

Правила могут учитывать идентификатор vendor:product, серийный номер, хеш дескрипторов, имя и физический порт. Чем больше признаков, тем точнее правило, но тем сложнее обслуживание. Для доменной машины разумно разрешать конкретные модели, а для временного доступа — определённый порт.

Установка

Пакет есть в Debian, Ubuntu, Linux Mint и Fedora. Вместе с демоном ставится утилита usbguard для управления политикой.

sudo apt update
sudo apt install usbguard
systemctl status usbguard --no-pager
usbguard --version

В Fedora используйте sudo dnf install usbguard. Сразу после установки служба может быть выключена. Не включайте её до генерации политики: пустой набор правил с политикой block сделает неработоспособными USB-клавиатуры и мыши.

Генерация политики без блокировки себя

Штатный путь такой: подключите все доверенные устройства, которые должны работать постоянно, и только затем снимите текущее состояние. В политику попадут клавиатура, мышь, веб-камера, док-станция и внутренние устройства, висящие на USB-шине.

lsusb
sudo usbguard generate-policy > /tmp/usbguard-rules.conf
wc -l /tmp/usbguard-rules.conf
sudo install -m 0600 /tmp/usbguard-rules.conf /etc/usbguard/rules.conf

В файле окажутся строки вида allow id 046d:c52b serial "..." name "USB Receiver" hash "...". Проверьте, что в нём есть клавиатура, мышь и сетевой адаптер, если он подключён по USB. Для сервера убедитесь, что в правилах нет временной флешки, забытой в порту: иначе она станет доверенной навсегда.

Настройка демона

Основные параметры находятся в /etc/usbguard/usbguard-daemon.conf. Для рабочей станции подходит явная политика block для всего, что не описано, и применение правил как к уже подключённым, так и к новым устройствам.

sudo cp /etc/usbguard/usbguard-daemon.conf /etc/usbguard/usbguard-daemon.conf.bak
sudo sed -i 's/^ImplicitPolicyTarget=.*/ImplicitPolicyTarget=block/' /etc/usbguard/usbguard-daemon.conf
sudo sed -i 's/^PresentDevicePolicy=.*/PresentDevicePolicy=apply-policy/' /etc/usbguard/usbguard-daemon.conf
sudo sed -i 's/^InsertedDevicePolicy=.*/InsertedDevicePolicy=apply-policy/' /etc/usbguard/usbguard-daemon.conf

Параметр RuleFile указывает на /etc/usbguard/rules.conf, а AuthorizedDefault задаёт состояние устройства до применения правила. Не меняйте несколько параметров одновременно: после правки перезапустите службу и проверьте, что клавиатура и мышь продолжают работать. Если что-то пошло не так, у вас остаётся вторая консоль или TTY.

sudo systemctl restart usbguard
sudo usbguard list-devices
sudo usbguard list-rules
sudo systemctl enable usbguard

Включайте автозапуск только после проверки в текущей сессии. Команда list-devices показывает номер, политику allow или block и описание устройства. Номер из первой колонки используется в командах управления, но он не постоянен между перезагрузками — в скриптах надёжнее работать с правилами по идентификатору.

Правила и повседневное управление

Разрешение выдают на время или навсегда. Флаг -p делает изменение постоянным, без него правило живёт до перезапуска. Для нового устройства сначала посмотрите его параметры, затем добавьте правило и проверьте список.

sudo usbguard allow-device 12
sudo usbguard allow-device 12 -p
sudo usbguard block-device 12
sudo usbguard append-rule 'allow id 0781:5581 via-port "1-2"'

Действия различаются: allow разрешает устройство, block оставляет его видимым, но неработоспособным, reject имитирует физическое отключение и убирает устройство из системы. Для подозрительной флешки удобен reject, для временно ненужной — block. Правило с via-port привязывает разрешение к конкретному порту. Если убрать из правила идентификатор, доступ получит любое устройство в этом порту — так делать не стоит.

Проверка и диагностика

Режим наблюдения показывает события в реальном времени. Подключите тестовую флешку и посмотрите, какое решение принял демон, прежде чем менять политику.

sudo usbguard watch
dmesg --follow | grep -i usb
lsusb -t
udevadm info --attribute-walk --name=/dev/bus/usb/001/003

Если устройство есть в lsusb, но не появляется как блочное, проверьте list-devices: вероятно, сработала политика block. Если не появляется и в списке, смотрите журнал службы. Команда udevadm помогает получить серийный номер и идентификаторы для точного правила.

journalctl -u usbguard -b --no-pager
sudo usbguard list-devices | grep -i block
cat /sys/bus/usb/devices/1-2/authorized
sudo usbguard remove-rule 3

Файл authorized содержит 1 для разрешённого устройства и 0 для заблокированного. Номер правила для удаления берите из list-rules: после правок нумерация меняется.

Если клавиатура перестала работать

Это частая авария при первом включении. Заранее оставьте включённым SSH, подключите второй TTY или имейте физический доступ к машине. На сервере без консоли включать USBGuard без удалённого управления нельзя.

Если ввод недоступен, перезагрузитесь и добавьте в параметры ядра systemd.mask=usbguard.service — служба не стартует, и USB-устройства снова заработают. Затем смонтируйте корень, исправьте rules.conf и только после этого снимайте маску. На машине с работающим SSH достаточно выполнить sudo systemctl stop usbguard и отредактировать политику.

Чек-лист внедрения

  • Подключите все доверенные устройства до генерации политики.
  • Сохраните резервную копию конфигурации и правил.
  • Проверьте клавиатуру, мышь и сетевой адаптер после перезапуска.
  • Оставьте альтернативный доступ: TTY, SSH или физическую консоль.
  • Задокументируйте, кто и какие устройства может подключать.
  • Включайте автозапуск только после успешного теста.

Итог

USBGuard закрывает риск, который часто недооценивают: подключение незнакомой флешки или эмулятора клавиатуры. Демон работает предсказуемо, если сначала собрать политику с доверенными устройствами, а затем включать блокировку. Небольшая дисциплина при генерации правил и запасной способ доступа позволяют избежать блокировки собственной клавиатуры. Для организаций это простой и прозрачный слой защиты, который хорошо сочетается с шифрованием и ограничением автозапуска.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте