udev 是否可以用于(udev 规则)将某些 USB 设备列入白名单?
我的意思是,只有我创建的列表中的设备(包含我可以使用 lsusb 获取的设备 ID)才会被 udev 传递/处理。不在我的列表中的设备应尽快被 udev 忽略(甚至不会通知设备的驱动程序)。
我听说过“udev 规则”。如果您了解 udev 规则的工作原理,您认为可以将它们用于我的目的吗?
你可能想知道我为什么要这样做。这是出于安全目的。在此处查看有关此类漏洞的更多详细信息:http://www.charlescurley.com/blog/archives/2011/03/13/linux_usb_vulnerability/index.html
答案1
编写正确规则的关键是理解 udev 规则是按特定顺序应用的。默认的、软件包提供的规则位于 中/lib/udev/rules.d/
。不要管这些文件。本地规则应放在 中,/etc/udev/rules.d/
其优先级高于/lib/udev/rules.d
。
您的文件(如果您选择创建一个新文件)必须以 结尾.rules
,并且可以随意命名,但是会首先处理编号文件。如果您想覆盖编号规则文件,请为文件名选择一个更高的数字,或者选择一个没有数字的文件名,它将在所有编号规则文件之后运行。因此,这个想法是:首先运行您的总黑名单规则,然后运行白名单规则以允许您要允许的特定设备。
然而,已经有人指出,这种攻击需要物理访问,而且这种漏洞通常很快就会被修复。然而,更糟糕的是更多的有趣的是,如果你使用的是 Ubuntu 9.10 及以上版本,你就不会受到这种攻击。自 9.10 以来表明的 AppArmor 配置文件将包含恶意进程,并限制其窃取您的缩略图。请参阅:USN-1035-1:Evince 漏洞
答案2
您需要添加规则,/lib/udev/rules.d/
将仅给定的设备列入白名单,并将其余设备列入黑名单。
您可以阅读/lib/udev/rules.d/75-persistent-net-generator.rules
示例。它展示了如何过滤设备并选择是否激活设备。
答案3
我不会害怕这个。来自链接:“该漏洞需要 USB 密钥,因此需要物理访问”。任何具有物理访问权限的人都可以更改您的 root 帐户密码、格式化磁盘、复制和移动文件、留下 rootkit、重新启动并使用实时 CD 或在实时 CD 会话期间从 RAM 访问 USB 记忆棒。而且这种类型的问题很快就能得到解决(发现此问题的人也进行了修复)。
即便如此......我找到了ubuntuforums 上的主题专门为 usb 制定特殊的 udev 规则:简而言之(更多信息见链接):
创建文件/etc/udev/rules.d/91-local.rules
并将其复制到其中SUBSYSTEMS=="usb", KERNEL=="sd??", ACTION=="add", RUN+="/usr/local/bin/USB %k"
%k
是内核将解析为要执行的脚本 USB 的设备(sudo chmod +x /usr/local/bin/USB
)。
现在您可以创建一个名为 USB 的脚本,它可以根据您的条件执行一些操作,例如不安装它(链接中是进行备份的设置)。