4.12. 使用 USBGuard


USBGuard 软件框架通过实施基于设备属性的基本白名单和黑名单功能,提供对入侵 USB 设备的系统保护。要强制执行用户定义的策略,USBGuard 使用 Linux 内核 USB 设备授权功能。USBGuard 框架提供以下组件:
  • 带有进程间通信(IPC)接口的守护进程组件,用于动态交互和策略强制执行。
  • 与正在运行的 USBGuard 实例交互的命令行界面。
  • 编写 USB 设备授权策略的规则语言。
  • 用于与共享库中实施的守护进程交互的 C++ API。

4.12.1. 安装 USBGuard

要安装 usbguard 软件包,请以 root 用户身份输入以下命令:
~]# yum install usbguard
Copy to Clipboard Toggle word wrap
要创建初始规则集,请以 root 用户身份输入以下命令:
~]# usbguard generate-policy > /etc/usbguard/rules.conf
Copy to Clipboard Toggle word wrap
注意
要自定义 USBGuard 规则集,请编辑 /etc/usbguard/rules.conf 文件。详情请查看 usbguard-rules.conf (5) 手册页。另外,请参阅 第 4.12.3 节 “使用规则语言创建您自己的策略”
要启动 USBGuard 守护进程,请以 root 用户身份输入以下命令:
~]# systemctl start usbguard.service
~]# systemctl status usbguard
● usbguard.service - USBGuard daemon
   Loaded: loaded (/usr/lib/systemd/system/usbguard.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2017-06-06 13:29:31 CEST; 9s ago
     Docs: man:usbguard-daemon(8)
 Main PID: 4984 (usbguard-daemon)
   CGroup: /system.slice/usbguard.service
           └─4984 /usr/sbin/usbguard-daemon -k -c /etc/usbguard/usbguard-daem...
Copy to Clipboard Toggle word wrap
要确保 USBGuard 在系统启动时自动启动,请以 root 用户身份运行以下命令:
~]# systemctl enable usbguard.service
Created symlink from /etc/systemd/system/basic.target.wants/usbguard.service to /usr/lib/systemd/system/usbguard.service.
Copy to Clipboard Toggle word wrap
要列出 USBGuard 识别的所有 USB 设备,请以 root 用户身份输入以下命令:
~]# usbguard list-devices
1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00
...
6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
Copy to Clipboard Toggle word wrap
要授权设备与系统交互,请使用 allow-device 选项:
~]# usbguard allow-device 6
Copy to Clipboard Toggle word wrap
要取消授权并从系统中删除设备,请使用 reject-device 选项。要只取消授权设备,请使用带有 block-device 选项的 usbguard 命令:
~]# usbguard block-device 6
Copy to Clipboard Toggle word wrap
usbguard 使用 blockreject 术语,其含义如下:
  • block - 暂时不要与这个设备通信
  • reject - 忽略这个设备,就像不存在一样
要查看 usbguard 命令的所有选项,请使用 --help 指令输入它:
~]$ usbguard --help
Copy to Clipboard Toggle word wrap

4.12.2. 创建白名单列表和黑名单列表

usbguard-daemon.conf 文件由 usbguard 守护进程加载,在解析其命令行选项后,用于配置守护进程的运行时参数。要覆盖默认配置文件(/etc/usbguard/usbguard-daemon.conf),请使用 -c 命令行选项。详情请查看 usbguard-daemon (8) 手册页。
要创建白名单或黑色列表,请编辑 usbguard-daemon.conf 文件并使用以下选项:

usbguard 配置文件

RuleFile=<path>
usbguard 守护进程使用此文件从中加载策略规则集,并编写通过 IPC 接口接收的新规则。
IPCAllowedUsers=<username> [<username> ...]
守护进程将接受来自的 IPC 连接的用户名列表。
IPCAllowedGroups=<groupname> [<groupname> ...]
守护进程将接受来自的 IPC 连接的组名称列表。
IPCAccessControlFiles=<path>
保存 IPC 访问控制文件的目录的路径。
ImplicitPolicyTarget=<target>
如何对待策略中的任何规则都不匹配的设备。接受的值: allow、block、reject。
PresentDevicePolicy=<policy>
如何处理守护进程启动时已连接的设备:
  • Allow - 授权每个存在的设备
  • block - 取消授权每个存在的设备
  • reject - 删除每个存在的设备
  • keep - 只同步内部状态并保留它
  • apply-policy - 评估每个存在设备的规则集
PresentControllerPolicy=<policy>
如何处理守护进程启动时已连接的 USB 控制器:
  • Allow - 授权每个存在的设备
  • block - 取消授权每个存在的设备
  • reject - 删除每个存在的设备
  • keep - 只同步内部状态并保留它
  • apply-policy - 评估每个存在设备的规则集

例 4.5. usbguard 配置

以下配置文件订购 usbguard 守护进程从 /etc/usbguard/rules.conf 文件中加载规则,它只允许 usbguard 组中的用户使用 IPC 接口:
RuleFile=/etc/usbguard/rules.conf
IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
Copy to Clipboard Toggle word wrap
要指定 IPC 访问控制列表(ACL),请使用 usbguard add-userusbguard remove-user 命令。如需了解更多详细信息,请参阅 usbguard (1)。在本例中,要允许 usbguard 组中的用户修改 USB 设备授权状态、列出 USB 设备、侦听异常事件以及列出 USB 授权策略,请以 root 用户身份输入以下命令:
~]# usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
Copy to Clipboard Toggle word wrap
重要
守护进程提供 USBGuard 公共 IPC 接口。在 Red Hat Enterprise Linux 中,对此接口的访问默认仅限于 root 用户。考虑设置 IPCAccessControlFiles 选项(推荐)或 IPCAllowedUsersIPCAllowedGroups 选项,来限制对 IPC 接口的访问。不要将 ACL 保留为未配置,因为这会向所有本地用户公开 IPC 接口,并允许他们操作 USB 设备的授权状态并修改 USBGuard 策略。
如需更多信息,请参阅 usbguard-daemon.conf (5) 手册页中的 IPC 访问控制部分。

4.12.3. 使用规则语言创建您自己的策略

usbguard 守护进程决定是否根据一组规则定义的策略授权 USB 设备。当 USB 设备插入系统时,守护进程会按顺序扫描现有规则,并在找到匹配规则时,根据规则目标授权(allows)、取消授权(阻止)或删除(拒绝)设备。如果没有找到匹配的规则,则决定基于隐式默认目标。这个隐式默认为阻止设备,直到用户做出决定。
规则语言 grammar 如下:
rule ::= target device_id device_attributes conditions.

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

device_id ::= "*:*" | vendor_id ":*" | vendor_id ":" product_id.

device_attributes ::= device_attributes | attribute.
device_attributes ::= .

conditions ::= conditions | condition.
conditions ::= .
Copy to Clipboard Toggle word wrap
有关规则语言(如 target、设备规格或设备属性)的详情,请查看 usbguard-rules.conf (5) 手册页。

例 4.6. usbguard 示例策略

允许 USB mass 存储设备以及阻止所有其他设备
这个策略会阻止任何不仅仅是一个大容量存储设备的设备。USB 闪存磁盘中带有隐藏键盘接口的设备被阻止。只有具有单个大容量存储接口的设备才能与操作系统交互。该策略由一个规则组成:
allow with-interface equals { 08:*:* }
Copy to Clipboard Toggle word wrap
阻塞是隐式的,因为没有块规则。隐式阻止对桌面用户很有用,因为侦听 USBGuard 事件的桌面小程序可以询问用户是否为设备选择了隐式目标。
允许通过特定端口连接特定的 Yubikey 设备
拒绝该端口上的所有其他操作。
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998"
reject via-port "1-2"
Copy to Clipboard Toggle word wrap
拒绝具有可疑接口组合的设备
实施键盘或网络接口的 USB 闪存磁盘非常可疑。以下一组规则形成了一个策略,它允许 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:*:* }
Copy to Clipboard Toggle word wrap
注意
黑名单是错误的方法,您不应该只将一组设备列入黑名单,并允许其余设备。上面的策略假定阻止是隐式默认值。拒绝一组设备被视为"bad"是一种良好的方法,如何将系统暴露限制尽可能多。
允许只使用键盘的 USB 设备
只有已经允许使用键盘接口的 USB 设备时,以下规则才允许键盘 USB 设备。
allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })
Copy to Clipboard Toggle word wrap
使用 usbguard generate-policy 命令生成初始策略后,编辑 /etc/usbguard/rules.conf 来自定义 USBGuard 策略规则。
~]$ usbguard generate-policy > rules.conf
~]$ vim rules.conf
Copy to Clipboard Toggle word wrap
要安装更新的策略并使您的更改有效,请使用以下命令:
~]# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
Copy to Clipboard Toggle word wrap

4.12.4. 其它资源

有关 USBGuard 的更多信息,请参阅以下文档:
  • usbguard (1) 手册页
  • usbguard-rules.conf(5) man page
  • usbguard-daemon (8) 手册页
  • usbguard-daemon.conf(5) man page
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat