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"但此选项已消失。
我怎样才能做到这一点?
您需要为每种可能的输入设备类型编写一条规则,即:
在规则中,测试具有该名称的环境变量是否为非空,例如将其与?*仅在存在至少一个字符时才匹配的 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 的演讲。