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