如何防止某些 USB 端口上的 HID 设备?

ens*_*nsc 8 linux security usb udev

出于安全原因,我想防止输入设备无法在某个 USB 端口上使用。此端口必须提供非输入功能(例如大容量存储或 ttyUSB)。输入设备必须仍在其他 USB 端口上工作。

“不能使用”意味着例如没有/dev/input/eventX创建相应的设备并且通用框架(X11、linux 控制台)不接受来自设备的输入。

我可以通过 udev 规则识别 USB 端口,例如

DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7.1/*"
Run Code Online (Sandbox Code Playgroud)

但我不确定如何禁用它。

支持古老的 udev 版本,OPTIONS+="ignore_device"但此选项已消失。

我怎样才能做到这一点?

meu*_*euh 3

您需要为每种可能的输入设备类型编写一条规则,即:

  • ID_INPUT_KEYBOARD
  • ID_INPUT_KEY
  • ID_INPUT_MOUSE
  • ID_INPUT_触摸板
  • ID_输入_平板电脑
  • ID_INPUT_JOYSTICK

在规则中,测试具有该名称的环境变量是否为非空,例如将其与?*仅在存在至少一个字符时才匹配的 glob 模式进行匹配。例如:

ENV{ID_INPUT_KEYBOARD}=="?*"
Run Code Online (Sandbox Code Playgroud)

在每条规则中,当匹配时,将设备的authorized属性设置为0,例如:

ATTR{authorized}="0"
Run Code Online (Sandbox Code Playgroud)

最好替换=为,:=这样它就不会被以后的规则覆盖。这给出了一个典型的规则:

ACTION=="add", DEVPATH=="...", ENV{ID_INPUT_KEYBOARD}=="?*", ATTR{authorized}:="0"
Run Code Online (Sandbox Code Playgroud)

请参阅Adrian Crenshaw 的演讲