web-dev-qa-db-ja.com

udevを使用したUSBフラッシュのホワイトリスト

USBフラッシュドライブの「ホワイトリスト」のようなものを作成したいと思います。 「許可されていないものはすべて拒否する」という意味です。

udevルールを使用する必要があることはわかっています。

  1. 追加 /etc/udev/rules.d/すべてのUSBフラッシュドライブを拒否するルール
  2. 番号の大きい別のルールを追加して、必要なものを許可します

USBフラッシュドライブのみを扱いたい。ルールは、USBドライブからの任意の情報に基づくことができます。ベンダーID、シリアル番号を意味します。私はこの場合、私は何の願いも持っていないことを意味します。任意のソリューション。

しかし、ルールファイルに何を書き込むべきかわかりません。例を挙げていただけますか?

UPD。次の内容のファイルを作成します。

deck@crunch /etc/udev/rules.d $ cat 90-deny-usbflash.rules 
BUS=="usb", OPTIONS+="ignore_device"

私が知っているように、このフォルダはudevを使用してinotifyによって監視されているため、変更はすぐに有効になります。ただし、変更は適用されません。

3
Deck

すべてのドライブを自動マウントする他のソフトウェアがインストールされているかどうかはわかりませんでした。以下の私の解決策は、あなたがそうしないことを前提としています。もしそうなら、あなたの問題は異なります:誰かがそれをアンインストールするか、それを制御する方法を提案できるように、それが何であるかを指定する必要があります。

許可されたドライブのみをマウントするudevルールの例を次に示します(テストされていませんが、私が使用している同様のルールに基づいています)。

#-- Skip if not an appropriate "sd" device
KERNEL!="sd[b-z]*", GOTO="99_exit"
SUBSYSTEM!="block", GOTO="99_exit"

#-- Handle 'remove' and 'change' events
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/usr/bin/pumount /dev/%k", GOTO="99_exit"
ACTION=="remove|change", GOTO="99_exit"

#-- Create useful environment variables
SUBSYSTEMS=="usb", ENV{ID_SERIAL}!="?*", IMPORT{builtin}="usb_id"
SUBSYSTEMS=="usb", ENV{ID_FS_LABEL}!="?*", IMPORT{program}="/sbin/blkid -o udev -p %N"

#-- Skip if this is not a filesystem (e.g. if this is the whole drive, not a formatted partition)
ENV{ID_FS_USAGE}!="filesystem", GOTO="99_exit"

#-- Mount only allowed drives:
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="something_allowed", RUN+="/usr/bin/Sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/some_name"
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="other_allowed", RUN+="/usr/bin/Sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/other_name"

#-- Exit
LABEL="99_exit"

もちろん、使用するマウントコマンドは好みに応じて異なります。私が示したものはほんの一例です。

更新:あなたのコメントから、自動マウントを行うものがインストールされているとのことです。私のシステム(Debian Wheezy)では、そうではありません。あなたが提案したgrepを試してみたところ、別の結果が得られました。 /lib/udev/rules.d/80-udisks.rules、私はコードのこのセクションを見つけました:

# Mark devices that shouldn't be automounted / autoassembled etc.
#
# Deny all, then punch holes for what looks like physical drives
# (TODO: this heuristic might need some work)
#

ENV{UDISKS_PRESENTATION_NOPOLICY}="1"
KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{DISKS_PRESENTATION_NOPOLICY}="0"

これは、if自動マウントソフトウェアをインストールした場合、UDISKS_PRESENTATION_NOPOLICY環境変数で制御できることを示しています。ディストリビューションを指定していませんが、明らかに異なります。

3
John1024

SBGuard を試すことができます。 UDevとLinuxカーネルのUSB認証フレームワークの上にUSBデバイスのブラックリスト/ホワイトリストを実装します。すでに提案されているUDevを使用して同じことを実現できますが、USBGuardはそのジョブ専用のツールであり、 ルール言語 と(オプションの)GUIアプレットがあります。

USBフラッシュディスクには通常シリアル番号があるため、VID:PIDとシリアル番号を使用したホワイトリストはusbguardで次のようになります。

allow 1234:5678 serial "123456" with-interface equals { 08:*:* }
allow 1234:5678 serial "abcdef" with-interface equals { 08:*:* }
block

これにより、大容量記憶装置インターフェース、VID:PIDまたは1234:5678、および「123456」または「abcdef」のいずれかのiSerial値のみで2つのUSBデバイスを接続できるようになります(承認)。他のすべてはブロックされます。

免責事項:私はそのプロジェクトの作者です。

1
Daniel Kopeček