防止在 Linux 上使用 USB 设备

防止在 Linux 上使用 USB 设备

Linux 中是否有办法阻止使用 USB 设备(例如 USB 驱动器、蓝牙适配器等)?我更喜欢黑名单/白名单之类的东西。

在某些情况下,我可以访问应允许的特定设备(例如我的个人 USB 棒)并获取设备 ID。所有未知设备都不应被使用。如果可能的话,这些设备根本不应该通电。

在我的研究中,我发现禁用 USB 驱动程序是禁用所有 USB 设备的通用方法。或者在启动期间卸载特定设备 ID。但是,如果您在启动过程后插入设备,或者再次安装它,它仍然可以工作。

答案1

我知道这有点老了但它仍然可能给你一些帮助和建议。 https://security.stackexchange.com/questions/65323/is-it-possible-to-usb-whitelist-in-linux

如果你想知道我是如何找到它的: https://www.google.com/search?client=firefox-bd&q=linux+whitelist+usb+devices

答案2

在某些情况下,我可以访问应该允许的特定设备(例如我的个人 USB 棒)并可以获取设备 ID。

Linux /sys 中的每个 USB 设备都有一个authorized属性 - 如果将其设置为 0,则该设备中的任何 USB 接口都不会附加驱动程序,因此该设备将无法运行。

集线器(包括计算机内的“根集线器”)还具有一个authorized_default属性,用于设置连接到该集线器的设备的默认授权。如果将其设置为 0,则新设备将不会获得授权,除非有人手动将“1”写入其“授权”属性。

这些设备属性显示为 /sys 下的文件,但它们通常使用 udev 规则进行管理 - 例如,编写设置ATTR{authorized}="0" 将取消设备授权的规则。例如:

SUBSYSTEM!="usb", GOTO="deauthorize_end"
TEST!="authorized", GOTO="deauthorize_end"
# Set default for hubs
TEST=="authorized_default", ATTR{authorized_default}="0", GOTO="deauthorize_end"
# Allow some devices
ENV{ID_VENDOR}=="Yubico", ENV{ID_MODEL}=="Yubikey_NEO*", ATTR{authorized}="1"
LABEL="deauthorize_end"

USB卫士守护进程可以自动执行此操作,并执行其他检查,例如验证设备提供哪些接口。(虽然设备的名称是“USB 闪存驱动器”,但这并不意味着它是键盘。)例如:

allow 1050:0010 serial "0001234567" name "Yubico Yubikey II" with-interface "03:01:01"

请注意,这些解决方案处理仅有的传统 USB – 它们无法处理 Thunderbolt 设备,也无法处理 FireWire 设备(如果您仍有此类端口)。您可以使用 [bolt] 守护程序来保护 Thunderbolt 3 端口。

如果可能的话,这些设备根本不应该接通任何电源。

问题是您无法获取无电设备的设备 ID。

有时可以使用uhubctl(取决于控制器)关闭单个 USB 端口的电源;但是,如果你为了应对未经授权的设备而关闭端口,系统将永远不知道何时会出现已授权设备连接到同一端口。

相关内容