sudo 権限のないスクリプトで USB ドライブの読み取り/書き込み操作を処理する

sudo 権限のないスクリプトで USB ドライブの読み取り/書き込み操作を処理する

私は、ある時点で USB ドライブ ユニットに書き込む必要があるアプリケーションを開発しています。アプリケーションはスーパーユーザー以外の権限で実行され、ドライブに書き込む最良の方法は、ドライブが挿入されたらすぐにフラッシュ オプションでマウントすることだと思いました。この方法であれば、理論的には、次の udev ルールを使用して umount 操作を実行する必要はありません。

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

マウント スクリプトは次のようにコマンドを呼び出そうとします。

mount -o --flush $1 /media/my-user/my-usb-unit

でも私はこのマウントエラー:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

興味深いのは、udev ルールを使用してマウントしようとしたときにのみこのエラーが発生することです。mymountscript.sh自分で呼び出すと、ユニットはポイントに適切にマウントされます。

この問題の解決策とは別に、この方法を実行するのは危険かどうか知りたいです (ファイルの書き込み後にドライブをアンマウントしないためだと理解しています)。別の方法を使用する場合は、ユニットをマウント/アンマウントできるように、アプリケーション スクリプト (ユーザーに代わって実行される) が必要になります。このためには、デバイスが挿入されたときにデバイス名をどこかに保存し、アプリケーションにマウント権限を付与する必要があります。

OSはXubuntu16.04です。

答え1

これに対する私の回避策は、次のように管理することでした。

  1. USB 挿入アクション用の 1 つの udev ルール。

  2. その間に実行されるスクリプトは、ドライブ自体をマウント/アンマウントします。

  3. USB 削除アクション用の udev ルールが 1 つ。

USBが挿入される

デバイス名をファイルに保存するだけのスクリプトを 1 つ実行します。このルールに他のスクリプトを追加できます。

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

ここでは、myownscript.shデバイスをマウントしますマウント、これにより、標準ユーザー向けにリムーバブル ドライブのマウント/アンマウントが可能になります。次のスクリプトが使用する前に各スクリプトでユニットをアンマウントしておけば、その後に他のスクリプトを呼び出すことができます。

USBが削除される

ここでは、単純なスクリプトによって作成されたファイルが削除されるmy-usb-inserted.shため、スクリプト内にフラッシュ ユニットが挿入されていないことがわかります。

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

この回避策では、複数の USB ドライブを処理する必要があるという事実を考慮していません。

参照:

関連情報