Restricting USB Device Access —— 限制 USB 设备访问
本文是 RHCSS 培训课程第四节课的内容,博主结合红帽官方英文教材《RH415-RHEL7.5 Restricting USB Device Access》和红帽讲师翻译的中文教材《第四章 限制 USB 设备访问》整理了如下笔记。
几行代码
sudo blkid # 查看块设备文件类型
cd /sys/class/block # 切换到 /sys/class/block 目录获取相应设备信息
lsusb # 获取 USB 信息
lsblk # 获取系统磁盘信息
sudo lsusb [-v] # 查看系统上已连接的 USB 设备(详细信息)
sudo lssub -v | grep -Ei 'idVendor|Mass\ Storage' # 查看大容量存储的 USB 设备及生产厂商
sudo cat /sys/kernel/debug/usb/devices # 查看系统上已连接的 USB 设备信息
sudo lsusb -t # 查看 USB 设备的树状结构
sudo find /dev/bus/usb # 查看系统上已连接的 USB 设备文件
几个知识点
/etc/usbguard/rules.conf
文件保存永久 USBGuard 规则,该初始化文件为空,且所有者为 root
USBGuard 一旦生成默认规则,后续再接入新的 USB 设备,默认无权访问系统,并会被分配 block 规则目标
使用 sudo lsusb -t
查看 USB 设备的树状结构时
最后一列 | USB 几代 | 速率 |
---|---|---|
12M | 1.0/1.1 | 12 Mbit/s |
480M | 2.0 | 480 Mbit/s |
5.0G | 3.0 | 5 Gbit/s |
离线文档
man usbguard
man 8 usbguard-daemon
man 5 usbguard-daemon.conf
man 5 usbguard-rules.conf
USBGuard
rule target(规则目标)的种类
- allow:授权设备,允许设备及其接口与系统通信
- block:不授权设备,设备始终处于阻止状态,但对系统可见(
lsblk
不可见,lsusb
可见) - reject:取消授权并从系统移除设备,对系统完全不可见
常见子命令
list-devices # 列举 USBGuard 守护进程识别的所有 USB 设备
allow-device <id> # 允许识别的设备与系统交互
block-device <id> # 阻止设备授权
reject-device <id> # 取消授权并移除设备
list-rules # 列出由 USBGuard 守护进程使用的规则集(策略)
append-rule <rule> # 在指定的规则后面附加新的规则
remove-rule <id> # 从规则集中移除指定的规则
generate-policy # 生成规则集(策略),用于授权当前连接的 USB 设备
创建 initial rule set(初始规则集)
sudo yum install -y usbguard # 安装 USBGuard 软件包
sudo yum install -y usbutils usbdisk2 # 安装可选的软件包
systemctl enable --now usbguard.service # 激活 usbguard 服务并设置开机自启
sudo usbguard generate-policy > /etc/usbguard/rules.conf # 创建永久的初始化规则集以授权当前连接的 USB 设备,此时可能报错:zsh: permission denied: /etc/usbguard/rules.conf,应使用如下命令
sudo sh -c "usbguard generate-policy > /etc/usbguard/rules.conf" # 加入“sh -c”意为以整体为单位去执行
usbguard remove-rule 6 # USBGuard 删除规则 6
sudo systemctl restart usbguard.service # 重启 USBGuard 服务使初始化规则集生效
sudo usbguard list-rules # 列出当前的规则集
rule composition(规则组成)
规则序号 | 指定规则目标(策略) | usb-device-id | USB ISerial 设备属性 | USB 设备名称属性 | 根据设备属性和 USB 描述符数据计算的哈希 | USB 提供的接口类型 |
---|---|---|---|---|---|---|
1 | allow | 1d6b:0002 | serial “0000:00:04.7” | name “EHCI Host Controller” | hash and parent-hash | with-interface 09:00:00 |
usbguard-daemon
grep -Ev '^$|^#' /etc/usbguard/usbguard-daemon.conf # 显示擦除所有注释后的结果
AuditBackend=FileAudit # USBGuard Audit events log backend 可以选择“FileAudit”(记录到指定文件)或者“LinuxAudit”(使用 Linxu 审计子系统)
AuditFilePath=/var/log/usbguard/usbguard-audit.log # USBGuard 日志在 Linux Audit 中的默认日志
usermod -G usbguard student # 将 student 加入 usbguard 组,会覆盖 student 所在的最后一个组
usermod -aG usbguard student # 将 student 加入 usbguard 组,加上参数“a”就不会覆盖 student 所在的最后一个组
sudo usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen # 允许 usbguard 组中的用户修改 USB 设备的授权状态、列举 USB 设备、侦听异常事件,并列举 USB 授权策略等
sudo systemctl restart usbguard.service # 必须重启 USBGuard 服务使配置生效
不要让 ACL 保留未配置状态,这会使 IPC 接口向所有本地用户公开,允许他们操纵 USB 设备的授权状态,修改 USBGuard 策略