我怎么能够限制在 ubuntu 16.04 中以 root 用户身份授予用户账户所有 USB 端口的访问权限?
答案1
Ubuntu(以及所有现代 Linux 发行版)中处理添加或删除的设备所用的子系统称为“udev”。它允许您声明如何处理这些设备的规则。
如果你将规则文件放在/etc/udev/rules.d/
开头,99-
它将被评估后所有其他规则文件,覆盖在其中进行的任何设置。这就是你想要的。因此:
创建一个文件
/etc/udev/rules.d/99-lockdown-usb.rules
(如果不喜欢,请选择任何您喜欢的文件lockdown-usb
),其中包含以下内容:ACTION=="add", SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", ATTR{authorized_default}="0"
此规则匹配任何属于 USB 设备类别“09”(USB 主机设备)的“usb”子系统的“已添加”设备,并将“authorized_default”属性设置为 0(表示“false”)。该属性的作用是为任何随后发现的连接到该主机设备的客户端 USB 设备的“authorized”属性定义默认值。未经授权的 USB 设备会显示在 USB 设备列表中,但仍处于功能失调状态。
为了稍后手动启用连接的 USB 设备,请通过 sysfs 将其“授权”值设置为 1,例如:
echo 1 | sudo tee /sys/bus/usb/devices/2-1/authorized
(
2-1
本例中是内核分配的 USB 设备路径。如果涉及 USB 集线器,路径名可能变得更加复杂。您可以借助 找出特定设备的路径lsusb -t
。)这将像平常一样触发所有连接事件,例如存储设备出现在 Nautilus 中,键盘接受按键输入。这里重要的是,这些 sysfs 文件通常可由仅限超级用户这正是你想要的。
如果您只需要取消授权特定设备或设备类型,或者从锁定中排除特定设备或设备类型,您可以进一步细化 udev 规则来解决此问题。
灵感来自插入并捕获:恶意 USB 设备但有一些改进。