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 端口的电源;但是,如果你为了应对未经授权的设备而关闭端口,系统将永远不知道何时会出现已授权设备连接到同一端口。