Linux環境でベンダーIDに基づいてUSBデバイスを無効にしたい。ベンダーIDに基づいて、特定のUSBデバイスのみを許可したい。
デフォルトでデバイスを無効にするudevルールを作成できますが、ベンダーIDによって特定のルールを有効にします。ファイルを作る/etc/udev/rules.d/01-usblockdown.rules
デバイスを無効にするルールが含まれています:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for Host in /sys/bus/usb/devices/usb*; do echo 0 > $Host/authorized_default; done'"
次に、許可するデバイスを有効にするルール(ATTR{idVendor}
を使用してベンダーIDを取得します):
ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
詳細は "UDEVを使用したLinuxのロックダウン" を参照してください。
(これはコメントとしては良かったかもしれませんが、ポイントが足りないので回答に拡大しました)
ベンダーと製品IDで特定のデバイスを無効にすることを除いて、すべてのUSBデバイスを許可する方法を探してここに来ました。 devを使用してusbサウンドデバイスを無効にする方法 は、0d8c:000cの例に答えます。
/etc/udev/rules.d/disable-usb-device.rules
を作成:
ACTION=="add", ATTR{idVendor}=="0d8c", ATTR{idProduct}=="000c", RUN="/bin/sh -c 'echo 0 >/sys/\$devpath/authorized'"
RUN=
とRUN+=
では、以下の回答とコメントの間に相違があります。前者を試したところ、問題なく動作しました。
私はdmesgまたはlusbが異なる報告をすることを期待していましたが、どちらも許可されていないデバイスが以前と同じように列挙されていることを示していますが、自動的に起動する他のプロセス/モジュールが実行されていないように見え、これが望ましい効果でした。 cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized
(dmesgにある1-2.2 ...など)は、0が正しい場所に配置されたことを示しています。