web-dev-qa-db-ja.com

非rootユーザーにデバイスファイルへのアクセスを許可する方法

特定のボードが差し込まれたときに/devに表示されるデバイスファイルがあります。ボードへの読み取りおよび書き込み操作は正常に機能しますが、デバイスファイルを開くには、プログラムをルート権限で実行する必要があります。 root以外のすべてのユーザーが、sudoを使用せずにこの特定のデバイスファイルを開く方法はありますか?

17
sj755

はい、udevルールを記述できます。

/etc/udev/rules.dでファイルを作成30-mydevice.rules(番号は0から99までで、スクリプトの実行順序のみを決定する必要があります。名前は重要ではなく、説明的なものでなければなりません; .rules拡張子は必須ですが)

この例では、デバイスがUSBベースであり、ベンダーと製品ID(lsusb -vを使用して確認できます)を知っており、ユーザーが所属する必要があるmydeviceグループを使用していると想定しています。デバイスを使用する。その場合、これはファイルの内容である必要があります。

SUBSYSTEM=="usb", SYSFS{idVendor}=="0123", SYSFS{idProduct}=="4567", ACTION=="add", GROUP="mydevice", MODE="0664"

MODEが0664の場合、所有者(おそらくroot)と定義されたグループがデバイスに書き込むことができます。

16
TNW

1つの方法は、対応する「デバイブグループ」にユーザーを追加することです。 Linuxには、さまざまな種類のデバイス(ディスク、フロッピー、tty、ビデオ、cdromなど)に対応するさまざまなグループがあるため、/ etc/groupの対応するグループにユーザーを追加できます。

別の方法は、「疑似ユーザー」(例:ゲームユーザー)を作成することです。このユーザーを、必要なデバイスグループに追加します。最後に、特定のプログラム(画像をスキャンするプログラムなど)の所有者をこのユーザーに変更し、 "chmod u + s"を設定します。これにより、プログラムは実際のユーザーではなく疑似ユーザーとして実行され、デバイスにアクセスできるようになります。プログラムのグループを使用して、プログラムを実行できるユーザーを制限できます。

最後に、特定のデバイスを必要とするプログラムのグループをデバイスグループに設定し、「chmod g + s」を設定できます。これにより、プログラムはグループの権限で実行され(通常のユーザーが実行する権限に加えて)、デバイスへの拡張アクセスが可能になります。

3
Baard Kopperud