そのため、Linuxラップトップで特定のUSBドライブ(Kingston DataTraveler 2.0)のみを接続できるように、Linuxラップトップで安全なストレージをセットアップする環境をセットアップするために取り組んでいます。ベンダー:モデルコードは次のとおりです(lsusb
から):Bus 003 Device 003: ID 0951:1665 Kingston Technology
私はこれらのルールを機能させようとしましたが、12.04環境ではルールが機能しません。 (注:#
の先頭に行を追加してコメントを作成しましたが、udevファイルにはありません):
# If a device is NOT a Kingston drive, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="0951", OPTIONS+="ignore_device"
# If a device is a Kingston drive, but is NOT the model we have, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", OPTIONS+="ignore_device"
# If a device is a Kingston drive and is the model we have, then run a script
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1665", RUN+="/lib/udev/syslog-authorized-device-connected.sh"
私が抱えている問題は、これらのルールのどれも機能していないことであり、これがこれに対する正しいアプローチであるかどうかはわかりません。
考え?
非効果的なignore_device
に関する同じ問題の前に直面しました。なぜ他のソリューションを採用するのか、私には理解できませんでした。
さて、ignore_device
はudevリリース148で削除されました。 リリースノート または changelog を参照してください
気づいたなら、それの使用を示唆するすべてのトピックは古いです(〜2009)。
簡単な代替手段は、ENV{UDISKS_PRESENTATION_HIDE}="1"
(Ubuntu 12.04)を使用することです。 udisks2
を含むリリース(> = 12.10)では、ENV{UDISKS_IGNORE}="1"
を使用します。
リファレンス:Archlinux Wiki:Udisks
他のソリューションはSYSFSを使用しています。 device/authorized
(solsTiCeに記載)、device/remove
、またはdriver/unbind
のいずれか。 を参照してください選択したUSBポートで大容量記憶装置のみを使用する-方法は?
1つのブランド/モデルのみを除くすべてのストレージを拒否する方法には困難が伴います。そのため、ルールの一致条件は、1つ以上のデバイスノード(子デバイスまたは親デバイスなし)をフィルタリングする必要があります。だからKERNELS=="[1-9]*-[0-9]*"
を追加しました
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="0951", ENV{UDISKS_PRESENTATION_HIDE}="1"
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", ENV{UDISKS_PRESENTATION_HIDE}="1"
さて、UDisksは取り付けフックのみを隠します。これらは、SYSFSドライバーのバインド解除を使用する方が適切な場合があります。
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="125f", ENV{IF_STORAGE_REMOVE_ME}="1"
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}!="c96a", ENV{IF_STORAGE_REMOVE_ME}="1"
ENV{IF_STORAGE_REMOVE_ME}=="1", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
注:Sneetsherの回答によって廃止されました。この答えは、レガシーの理由でここに残されています。
だから、私はこれを解決しました、そしてそれはやるべき痛みでした。
ルールの制限を再検討し、機能を変更しました。どうやら、12.04はignore_device
オプションを尊重しません。そこで、アンマウントスクリプトを即興で作成しました。これらのシステムには機能するUSBポートが1つしかないため、次のようになりますが、他の問題が発生する可能性があります。
/etc/udev/rules.d/100-restrict-usb-devices.rules
# If a device is NOT a Kingston drive, ignore it.
ACTION=="add", ATTRS{idVendor}!="0951", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"
# If a device is a Kingston drive, but is NOT the model we have, ignore it.
ACTION=="add", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"
# If a device is a Kingston drive and is the model we have, then run a script
ACTION=="add", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1665", RUN+="/lib/udev/syslog-authorized-device-connected.sh", RUN+="/usr/bin/logger AuthorizedUSBConnected"
/lib/udev/unmount.sh
-現在存在するデバイスを最初にチェックし、次に他のすべてのドライブデバイスをチェックし、スクリプトが実行される場合にのみアンマウントするスクリプト。すべてのデバイスはsdb
、sdc
などになるため、すべてのデバイスを機能させる方法があります。
ストーリーの教訓:12.04では、システムはignore_device
オプションを無視します。すべてのスクリプトを作成する必要があります。 :/