web-dev-qa-db-ja.com

特定のUSBポートでHIDデバイスを防ぐ方法は?

セキュリティ上の理由から、特定のUSBポートで入力デバイスを使用できないようにしたいと思います。非入力機能(大容量記憶装置やttyUSBなど)がこのポートで使用可能である必要があります。入力デバイスは、他のUSBポートで引き続き機能している必要があります。

「使用できない」とは、たとえば対応する/dev/input/eventXデバイスは作成されず、一般的なフレームワーク(X11、Linuxコンソール)はデバイスからの入力を受け入れません。

USBポートは次のようなudevルールで識別できます

DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7.1/*"

しかし、それを無効にする方法がわかりません。

古いudevバージョンはOPTIONS+="ignore_device"をサポートしていましたが、このオプションはなくなりました。

これどうやってするの?

7
ensc

入力デバイスの可能なタイプごとにルールを作成する必要があります。

  • ID_INPUT_KEYBOARD
  • ID_INPUT_KEY
  • ID_INPUT_MOUSE
  • ID_INPUT_TOUCHPAD
  • ID_INPUT_TABLET
  • ID_INPUT_JOYSTICK

ルールで、その名前の環境変数が空でないことをテストします。たとえば、少なくとも1つの文字がある場合にのみ一致するグロブパターン?*と一致させます。例えば:

ENV{ID_INPUT_KEYBOARD}=="?*"

各ルールで、一致する場合は、デバイスのauthorized属性を0に設定します。例:

ATTR{authorized}="0"

=:=に置き換えて、後のルールで上書きできないようにすることをお勧めします。これにより、次の一般的なルールが得られます。

ACTION=="add", DEVPATH=="...", ENV{ID_INPUT_KEYBOARD}=="?*", ATTR{authorized}:="0"

このプレゼンテーション AdrianCrenshawによるを参照してください。

3
meuh