USBGuard: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{Stub}} USBGuard (https://usbguard.github.io/) предлагает механизм белого/чёрного списка для USB-устройств. USBGuard решает, какое USB-устройство авторизовать, на основе политики, определенной набором правил. При подключении USB-устройства к системе служба последовательно скани...»)
 
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{Stub}}
USBGuard (https://usbguard.github.io/) предлагает механизм белого/чёрного списка для USB-устройств.
USBGuard (https://usbguard.github.io/) предлагает механизм белого/чёрного списка для USB-устройств.


Строка 11: Строка 10:


Создать исходный набор правил на основе подключенных в данный момент USB-устройств (в правила с действием «allow» будут добавлены все подключенные устройства):
Создать исходный набор правил на основе подключенных в данный момент USB-устройств (в правила с действием «allow» будут добавлены все подключенные устройства):
<syntaxhighlight lang="bash">#usbguard generate-policy > /etc/usbguard/rules.conf</syntaxhighlight>
<syntaxhighlight lang="bash"># usbguard generate-policy > /etc/usbguard/rules.conf</syntaxhighlight>


{{Note|Создать исходный набор правил, не генерируя атрибуты хеш-функции для устройств:
{{Note|Создать исходный набор правил, не генерируя атрибуты хэш-функции для устройств:


<syntaxhighlight lang="bash">#usbguard generate-policy --no-hashes > /etc/usbguard/rules.conf</syntaxhighlight>}}
<syntaxhighlight lang="bash"># usbguard generate-policy --no-hashes > /etc/usbguard/rules.conf</syntaxhighlight>}}


Запустить службу usbguard и добавить её в автозагрузку:
Запустить службу usbguard и добавить её в автозагрузку:
Строка 71: Строка 70:


По умолчанию служба usbguard записывает события в файл {{path|/var/log/usbguard/usbguard-audit.log}} (параметр ''AuditFilePath'').
По умолчанию служба usbguard записывает события в файл {{path|/var/log/usbguard/usbguard-audit.log}} (параметр ''AuditFilePath'').
В параметре ''IPCAllowedUsers'' (устарел) можно указать список имен пользователей, разделенных пробелами, от которых служба будет принимать запросы (по умолчанию: root).
В параметре ''IPCAllowedGroups'' (устарел) можно указать список имен групп, разделенных пробелами, от которых служба будет принимать запросы (по умолчанию: wheel).
В параметре ''IPCAccessControlFiles'' указывается каталог, файлы в котором будут интерпретироваться службой как файлы определения управления доступом.
Каждый файл в этом каталоге обрабатывается следующим образом:
* базовое имя файла интерпретируется как имя пользователя, UID, имя группы или GID;
* если имя файла начинается с : (двоеточие), предполагается, что остальная часть имени представляет собой идентификатор группы (имя группы или GID в случае, если строка содержит только числовые значения);
* если имя файла не начинается с :, то имя файла интерпретируется как идентификатор пользователя (имя пользователя или UID в случае, если строка содержит только числовые значения).
Содержимое файла анализируется построчно. Каждая строка определяет привилегии раздела в формате:
Раздел=привилегия [привилегия ...]
Если раздел опущен, предполагается, что для этого раздела привилегии не предоставлены.
Например:
<syntaxhighlight lang="ini">IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/</syntaxhighlight>
Пример ACL пользователя user (содержимое файла {{path|/etc/usbguard/IPCAccessControl.d/user}}):
<syntaxhighlight lang="ini">
Devices=list,modify,listen
Policy=list,modify
Exceptions=listen</syntaxhighlight>
Доступные следующие разделы и привилегии:
* Devices
**modify: изменение состояния авторизации устройств, включая постоянные изменения (т.е. изменение правил для конкретных устройств в политике);
**list: возможность получить список распознанных устройств и их атрибутов;
**listen: прослушивание присутствия устройства и изменение политики устройства.
*Policy
**modify: возможность добавления/удаления правил в политике;
**list: возможность просмотра текущей политики;
*Exceptions
**listen: возможность получения сообщений об исключениях;
*Parameters
**modify: возможность установить значения параметров времени выполнения;
**list: возможность получить значения параметров времени выполнения.
{{Note|Для управления списком управления доступом (ACL), следует использовать команды {{cmd|usbguard add-user}} и {{cmd|usbguard remove-user}}.}}


== Правила ==
== Правила ==
Набор правил USBGuard по умолчанию хранится в файле {{path|/etc/usbguard/rules.conf}}. Но ручное редактирование правил обычно не требуется.  
Набор правил USBGuard по умолчанию хранится в файле {{path|/etc/usbguard/rules.conf}}. Но ручное редактирование правил обычно не требуется.  


Пример правила для принтера Canon, подключенного через USB:
Синтаксис правила:
<syntaxhighlight lang="text">rule ::= target attributes.
 
target ::= "allow" | "block" | "reject".
 
attributes ::= attributes | attribute.
attributes ::= .</syntaxhighlight>
Например, правило для принтера Canon, подключенного через USB:


  allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="
  allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="


Первое слово в правиле определяет политику:
Первое слово в правиле определяет политику (цель):
*''allow'' — добавляет устройство в белый список;
*''allow'' — добавляет устройство в белый список;
*''block'' — останавливает обработку устройства;
*''block'' — останавливает обработку устройства;
*''reject'' — удаляет устройство из системы.
*''reject'' — удаляет устройство из системы.


Затем следует набор атрибутов с их параметрами.
{{Note|USBGuard использует термины ''block'' и ''reject'' в следующих значениях:
*''block'' — пока не взаимодействовать с этим устройством;
*''reject'' — игнорировать это устройство, как будто его не существует.}}


USBGuard использует термины ''block'' и ''reject'' в следующих значениях:
Затем следует набор атрибутов с их параметрами. Атрибуты устройства — это определенные значения, считываемые с USB-устройства после его подключения к системе. Все атрибуты поддерживают две формы:
*''block'' — пока не взаимодействовать с этим устройством;
* однозначная:
*''reject'' — игнорировать это устройство, как будто его не существует.
*: <syntaxhighlight lang="text">name value</syntaxhighlight>
* многозначная:
*: <syntaxhighlight lang="text">name [operator] { value1 value2 … }</syntaxhighlight>
 
Возможные атрибуты:
{| class="wikitable"
! style="width: 30%"| Атрибут
! Описание
|-
| id usb-device-id
| Соответствует идентификатору USB-устройства. Идентификатор USB-устройства представляет собой пару, разделенную двоеточием, в форме vendor_id:product_id. И vendor_id и Product_id — это 16-битные числа в шестнадцатеричной системе счисления. Символ звездочки можно использовать для соответствия любому идентификатору устройства *:* или любому идентификатору продукта от конкретного поставщика, например, 1234:*.
|-
| id [оператор] {usb-device-id … }
| Соответствует набору идентификаторов USB-устройств
|-
| hash "value"
| Соответствует хэшу, вычисленному на основе значений атрибутов устройства и данных дескриптора USB. Хэш вычисляется USBGuard для каждого устройства
|-
| hash [оператор] { "value" … }
| Соответствует набору хэшей устройств
|-
| parent-hash "value"
| Соответствует хэшу родительского устройства
|-
| parent-hash [оператор] { "value" … }
| Соответствует набору хэшей родительского устройства
|-
| name "device-name"
| Соответствует имени USB-устройства
|-
| name [оператор] { "device-name" … }
| Соответствует набору имен USB-устройств
|-
| serial "serial-number"
| Соответствует серийному номеру устройства USB
|-
| serial [оператор] { "serial-number" … }
| Соответствует набору серийных номеров устройства USB
|-
| via-port "port-id"
| Соответствует USB-порту, через который подключено устройство. Значение port-id — это идентификатор USB-порта, специфичный для платформы. В Linux он имеет форму «usbN» в случае USB-контроллера (точнее, «корневого концентратора») или «bus-port[.port[.port …​]]» (например, 1-2, 1-2.1 , …​) в случае USB-устройства.
Некоторые системы имеют нестабильную нумерацию портов, которая меняется после перезагрузки системы или перезагрузки определенных модулей ядра. Необходимо использовать атрибут parent-hash, чтобы убедиться, что устройство подключено через определенное родительское устройство
|-
| via-port [оператор] { "port-id" … }
| Соответствует набору портов USB
|-
| with-interface interface-type
| Соответствует типу интерфейса, предоставляемому USB-устройством. Тип интерфейса указывается как три 8-битных числа в шестнадцатеричном формате, разделенных двоеточием, т.е. cc:ss:pp. Числа обозначают класс интерфейса (cc), подкласс (ss) и протокол (pp), назначенные USB-IF. Вместо номера подкласса и протокола можно использовать символ *, чтобы соответствовать всем подклассам или протоколам. Сопоставление определенного класса и определенного протокола не допускается, т.е. если в качестве номера подкласса используется «*», то для протокола также необходимо использовать «*».
|-
| with-interface [оператор] { interface-type interface-type … }
| Сопоставляет набор типов интерфейсов с набором интерфейсов, предоставляемых USB-устройством
|-
| with-connect-type "connect-type"
| Соответствует атрибуту устройства USB-порт/connect_type.
|-
| with-connect-type [оператор] { "connect-type" … }
| Соответствует набору атрибутов устройства USB-порт/connect_type.
|}
 
Необязательный параметр оператор является одним из:
* ''all-of'' — набор атрибутов устройства должен содержать все указанные значения;
* ''one-of'' — набор атрибутов устройства должен содержать хотя бы одно из указанных значений;
* ''none-of'' — набор атрибутов устройства не должен содержать ни одного из указанных значений;
* ''equals'' — набор атрибутов устройства должен содержать данный набор значений;
* ''equals-ordered'' — набор атрибутов устройства должен содержать данный набор значений в том же порядке;
* ''match-all'' — набор атрибутов устройства должен быть подмножеством указанных значений.
 
Если оператор не указан, ему присваивается значение ''equals''.
 
За исключением цели, все остальные поля правила являются необязательными. Правило, в котором указана только цель, будет соответствовать любому устройству. Это позволяет администратору политики указать явную цель по умолчанию. Если к устройству не применимо ни одно правило из политики, будет использоваться неявная цель, настроенная в {{path|/etc/usbguard/usbguard-daemon.conf}}.
 
Примеры политик:
* разрешить USB-накопители (карты-памяти) и заблокировать все остальное (например, мыши, клавиатуры):
*: <syntaxhighlight lang="text">allow with-interface 08:*:*</syntaxhighlight>
* разрешить подключение принтера Canon, подключенного через USB, через определённый порт:
*: <syntaxhighlight lang="text">allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="</syntaxhighlight>
* отклонять устройства с подозрительной комбинацией интерфейсов (USB-накопитель, оснащенный клавиатурой или сетевым интерфейсом):
*: <syntaxhighlight lang="text">allow with-interface equals { 08:*:* }
reject with-interface all-of { 08:*:* 03:00:* }
reject with-interface all-of { 08:*:* 03:01:* }
reject with-interface all-of { 08:*:* e0:*:* }
reject with-interface all-of { 08:*:* 02:*:* }</syntaxhighlight>

Текущая версия от 15:03, 16 мая 2024

USBGuard (https://usbguard.github.io/) предлагает механизм белого/чёрного списка для USB-устройств.

USBGuard решает, какое USB-устройство авторизовать, на основе политики, определенной набором правил. При подключении USB-устройства к системе служба последовательно сканирует существующие правила. Если соответствующее правило найдено, оно либо авторизует (разрешает), деавторизует (блокирует) или удаляет (отклоняет) устройство в зависимости от цели правила. Если соответствующее правило не найдено, решение принимается на основе неявной цели по умолчанию. Это неявное значение по умолчанию заключается в блокировке устройства до тех пор, пока пользователь не примет решение.

Примечание: Для выполнения задач по администрированию модуля можно также воспользоваться модулем ЦУС USBGuard.


Установка и первоначальная настройка

Установить пакет usbguard:

# apt-get install usbguard

Создать исходный набор правил на основе подключенных в данный момент USB-устройств (в правила с действием «allow» будут добавлены все подключенные устройства):

# usbguard generate-policy > /etc/usbguard/rules.conf
Примечание: Создать исходный набор правил, не генерируя атрибуты хэш-функции для устройств:
# usbguard generate-policy --no-hashes > /etc/usbguard/rules.conf


Запустить службу usbguard и добавить её в автозагрузку:

# systemctl enable --now usbguard

Команда usbguard

Синтаксис команды usbguard:

usbguard [ОПЦИИ] <команда> [ОПЦИИ КОМАНДЫ]

где команда может принимать одно из следующих значений:

  • get-parameter <name> — получить значение параметра времени выполнения;
  • set-parameter <name> <value> — установить значение параметра времени выполнения;
  • list-devices — вывести список всех USB-устройств, распознаваемых демоном USBGuard;
  • allow-device <id|rule|p-rule> — разрешить устройству взаимодействовать с системой;
  • block-device <id|rule|p-rule> — деавторизовать устройство;
  • reject-device <id|rule|p-rule> — деавторизовать и удалить устройство из системы;
  • list-rules — вывести набор правил (политику), используемый демоном USBGuard;
  • append-rule <rule> — добавить правило в набор правил;
  • remove-rule <id> — удалить правило из набора правил;
  • generate-policy — сгенерировать набор правил (политику) на основе подключенных USB-устройств;
  • watch — следить за событиями интерфейса IPC и выводить их на стандартный вывод;
  • read-descriptor — прочитать дескриптор USB из файла и вывести его в удобочитаемой форме;
  • add-user <name> — добавить пользователя/группу USBGuard IPC (требуются права root);
  • remove-user <name> — удалить пользователя/группу USBGuard IPC (требуются права root).

Дополнительную информацию смотрите на соответствующих страницах руководства, например:

$ usbguard add-user -h

Примеры:

  • вывести список подключенных устройств:
    $ usbguard list-devices
    1: allow id 1d6b:0002 serial "0000:00:0b.0" name "EHCI Host Controller" hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" parent-hash "BfFg9THiKJIvTnHGCjHfrWc00WcrIzhayJ9C3BiPYho=" via-port "usb1" with-interface 09:00:00 with-connect-type ""
    2: allow id 1d6b:0001 serial "0000:00:06.0" name "OHCI PCI host controller" hash "lUN32sIeMBBlD8Pd82mxu95iCTw8oKlT8iZDeg628/o=" parent-hash "XokStAV3JXWqQkW0l6YD7ZPFcHse1OtwuGmVNBCe46E=" via-port "usb2" with-interface 09:00:00 with-connect-type ""
    3: allow id 13fe:3e00 serial "11101094E6BA1A00A4A5200A" name "Silicon-Power4G" hash "0Dcf+ZVj7NkORO+RN1kxcP0rgDl6CqvqkcYkcf+0X/k=" parent-hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" via-port "1-1" with-interface 08:06:50 with-connect-type "unknown"
    
  • временно заблокировать устройство с id 3:
    $ usbguard block-device 3
    
  • для постоянной блокировки или и авторизации USB-устройство, следует использовать опцию -p. В этом случае в текущую политику будет добавлено правило для конкретного устройства:
    $ usbguard block-device 3 -p
    
  • вывести список правил:
    $ usbguard list-rules
    4: allow id 1d6b:0002 serial "0000:00:0b.0" name "EHCI Host Controller" hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" parent-hash "BfFg9THiKJIvTnHGCjHfrWc00WcrIzhayJ9C3BiPYho=" via-port "usb1" with-interface 09:00:00 with-connect-type ""
    5: allow id 1d6b:0001 serial "0000:00:06.0" name "OHCI PCI host controller" hash "lUN32sIeMBBlD8Pd82mxu95iCTw8oKlT8iZDeg628/o=" parent-hash "XokStAV3JXWqQkW0l6YD7ZPFcHse1OtwuGmVNBCe46E=" via-port "usb2" with-interface 09:00:00 with-connect-type ""
    6: block id 090c:1000 serial "2010121200000186" name "USB DISK" hash "2dfdMHZxF5olAaNbsh68G4fpzD3iQLPL3+M7KHnSRjE=" parent-hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" via-port "1-1" with-interface 08:06:50 with-connect-type "unknown"
    
  • дать пользователю user полный доступ к разделам «devices» и «exceptions», также, user будет иметь возможность просматривать и изменять текущую политику:
    # usbguard add-user -u user --devices ALL --policy modify,list --exceptions ALL
    
  • удалить права у пользователя user:
    # usbguard remove-user -u user
    

Конфигурация

Основной файл конфигурации USBGuard — /etc/usbguard/usbguard-daemon.conf.

В параметре PresentDevicePolicy определяется как обращаться с устройствами, которые уже подключены, при запуске службы. По умолчанию для PresentDevicePolicy установлено значение apply-policy, т.е. USBGuard оценивает набор правил для каждого подключенного устройства. Это наиболее безопасный параметр, который обеспечивает безопасность даже при перезагрузке службы.

В параметре ImplicitPolicyTarget настраивается политика обработки устройств по умолчанию, если ни одно правило не соответствует. Самый безопасный вариант здесь — block.

По умолчанию служба usbguard записывает события в файл /var/log/usbguard/usbguard-audit.log (параметр AuditFilePath).

В параметре IPCAllowedUsers (устарел) можно указать список имен пользователей, разделенных пробелами, от которых служба будет принимать запросы (по умолчанию: root).

В параметре IPCAllowedGroups (устарел) можно указать список имен групп, разделенных пробелами, от которых служба будет принимать запросы (по умолчанию: wheel).

В параметре IPCAccessControlFiles указывается каталог, файлы в котором будут интерпретироваться службой как файлы определения управления доступом. Каждый файл в этом каталоге обрабатывается следующим образом:

  • базовое имя файла интерпретируется как имя пользователя, UID, имя группы или GID;
  • если имя файла начинается с : (двоеточие), предполагается, что остальная часть имени представляет собой идентификатор группы (имя группы или GID в случае, если строка содержит только числовые значения);
  • если имя файла не начинается с :, то имя файла интерпретируется как идентификатор пользователя (имя пользователя или UID в случае, если строка содержит только числовые значения).

Содержимое файла анализируется построчно. Каждая строка определяет привилегии раздела в формате:

Раздел=привилегия [привилегия ...]

Если раздел опущен, предполагается, что для этого раздела привилегии не предоставлены.

Например:

IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/

Пример ACL пользователя user (содержимое файла /etc/usbguard/IPCAccessControl.d/user):

Devices=list,modify,listen
Policy=list,modify
Exceptions=listen

Доступные следующие разделы и привилегии:

  • Devices
    • modify: изменение состояния авторизации устройств, включая постоянные изменения (т.е. изменение правил для конкретных устройств в политике);
    • list: возможность получить список распознанных устройств и их атрибутов;
    • listen: прослушивание присутствия устройства и изменение политики устройства.
  • Policy
    • modify: возможность добавления/удаления правил в политике;
    • list: возможность просмотра текущей политики;
  • Exceptions
    • listen: возможность получения сообщений об исключениях;
  • Parameters
    • modify: возможность установить значения параметров времени выполнения;
    • list: возможность получить значения параметров времени выполнения.
Примечание: Для управления списком управления доступом (ACL), следует использовать команды usbguard add-user и usbguard remove-user.


Правила

Набор правил USBGuard по умолчанию хранится в файле /etc/usbguard/rules.conf. Но ручное редактирование правил обычно не требуется.

Синтаксис правила:

rule ::= target attributes.

target ::= "allow" | "block" | "reject".

attributes ::= attributes | attribute.
attributes ::= .

Например, правило для принтера Canon, подключенного через USB:

allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="

Первое слово в правиле определяет политику (цель):

  • allow — добавляет устройство в белый список;
  • block — останавливает обработку устройства;
  • reject — удаляет устройство из системы.
Примечание: USBGuard использует термины block и reject в следующих значениях:
  • block — пока не взаимодействовать с этим устройством;
  • reject — игнорировать это устройство, как будто его не существует.


Затем следует набор атрибутов с их параметрами. Атрибуты устройства — это определенные значения, считываемые с USB-устройства после его подключения к системе. Все атрибуты поддерживают две формы:

  • однозначная:
    name value
    
  • многозначная:
    name [operator] { value1 value2 … }
    

Возможные атрибуты:

Атрибут Описание
id usb-device-id Соответствует идентификатору USB-устройства. Идентификатор USB-устройства представляет собой пару, разделенную двоеточием, в форме vendor_id:product_id. И vendor_id и Product_id — это 16-битные числа в шестнадцатеричной системе счисления. Символ звездочки можно использовать для соответствия любому идентификатору устройства *:* или любому идентификатору продукта от конкретного поставщика, например, 1234:*.
id [оператор] {usb-device-id … } Соответствует набору идентификаторов USB-устройств
hash "value" Соответствует хэшу, вычисленному на основе значений атрибутов устройства и данных дескриптора USB. Хэш вычисляется USBGuard для каждого устройства
hash [оператор] { "value" … } Соответствует набору хэшей устройств
parent-hash "value" Соответствует хэшу родительского устройства
parent-hash [оператор] { "value" … } Соответствует набору хэшей родительского устройства
name "device-name" Соответствует имени USB-устройства
name [оператор] { "device-name" … } Соответствует набору имен USB-устройств
serial "serial-number" Соответствует серийному номеру устройства USB
serial [оператор] { "serial-number" … } Соответствует набору серийных номеров устройства USB
via-port "port-id" Соответствует USB-порту, через который подключено устройство. Значение port-id — это идентификатор USB-порта, специфичный для платформы. В Linux он имеет форму «usbN» в случае USB-контроллера (точнее, «корневого концентратора») или «bus-port[.port[.port …​]]» (например, 1-2, 1-2.1 , …​) в случае USB-устройства.

Некоторые системы имеют нестабильную нумерацию портов, которая меняется после перезагрузки системы или перезагрузки определенных модулей ядра. Необходимо использовать атрибут parent-hash, чтобы убедиться, что устройство подключено через определенное родительское устройство

via-port [оператор] { "port-id" … } Соответствует набору портов USB
with-interface interface-type Соответствует типу интерфейса, предоставляемому USB-устройством. Тип интерфейса указывается как три 8-битных числа в шестнадцатеричном формате, разделенных двоеточием, т.е. cc:ss:pp. Числа обозначают класс интерфейса (cc), подкласс (ss) и протокол (pp), назначенные USB-IF. Вместо номера подкласса и протокола можно использовать символ *, чтобы соответствовать всем подклассам или протоколам. Сопоставление определенного класса и определенного протокола не допускается, т.е. если в качестве номера подкласса используется «*», то для протокола также необходимо использовать «*».
with-interface [оператор] { interface-type interface-type … } Сопоставляет набор типов интерфейсов с набором интерфейсов, предоставляемых USB-устройством
with-connect-type "connect-type" Соответствует атрибуту устройства USB-порт/connect_type.
with-connect-type [оператор] { "connect-type" … } Соответствует набору атрибутов устройства USB-порт/connect_type.

Необязательный параметр оператор является одним из:

  • all-of — набор атрибутов устройства должен содержать все указанные значения;
  • one-of — набор атрибутов устройства должен содержать хотя бы одно из указанных значений;
  • none-of — набор атрибутов устройства не должен содержать ни одного из указанных значений;
  • equals — набор атрибутов устройства должен содержать данный набор значений;
  • equals-ordered — набор атрибутов устройства должен содержать данный набор значений в том же порядке;
  • match-all — набор атрибутов устройства должен быть подмножеством указанных значений.

Если оператор не указан, ему присваивается значение equals.

За исключением цели, все остальные поля правила являются необязательными. Правило, в котором указана только цель, будет соответствовать любому устройству. Это позволяет администратору политики указать явную цель по умолчанию. Если к устройству не применимо ни одно правило из политики, будет использоваться неявная цель, настроенная в /etc/usbguard/usbguard-daemon.conf.

Примеры политик:

  • разрешить USB-накопители (карты-памяти) и заблокировать все остальное (например, мыши, клавиатуры):
    allow with-interface 08:*:*
    
  • разрешить подключение принтера Canon, подключенного через USB, через определённый порт:
    allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="
    
  • отклонять устройства с подозрительной комбинацией интерфейсов (USB-накопитель, оснащенный клавиатурой или сетевым интерфейсом):
    allow with-interface equals { 08:*:* }
    reject with-interface all-of { 08:*:* 03:00:* }
    reject with-interface all-of { 08:*:* 03:01:* }
    reject with-interface all-of { 08:*:* e0:*:* }
    reject with-interface all-of { 08:*:* 02:*:* }