非rootユーザーに/ devファイルの読み取り/書き込みを許可する


8

私の/devフォルダーでは、次のファイルをユーザーが読み取りおよび書き込み可能にしたいと考えています。

/dev/ttyUSB0
/dev/gpib0

使用せずにこれを行うにはどうすればよいchgrpですか?編集はできます/etc/udev/rules.dが、構文がわかりません。


1
なぜこれらに読み取り/書き込み権限を与えたいのですか?
slm

このPCをいくつかのテストおよび計測機器(オシロスコープ、パワーメーターなど)のコントローラーとして使用しています。すべての読み取り/書き込みは、Pythonスクリプトとライブラリによって行われます。ユーザー自身が低レベルの読み取り/書き込みを行うことはありません。システムが無限に安全であると仮定しましょう。ラボの同僚が計測器用のスクリプトを簡単に作成できるようにしたいと思います。
2014年

3
代わりに、同僚にsudoアクセスを許可しないのはなぜですか?
slm

回答:


11

udevルールの構造

サブシステムttyに分類されるデバイスの場合、次のようにグループを設定できます。

SUBSYSTEM=="tty", GROUP="dialout"

==は、一般的なプログラミングと同様に、が=代入である場合の同等性のテストです。したがって、上記のステートメントは「if SUBSYSTEM=="tty"then assign GROUP="dialout"。」に変換されます。ステートメントには、ANDで結合された複数のテスト、および複数の割り当てが含まれる場合があります。

読み取り/書き込み/実行権限を変更したい場合は、GROUPの代わりにMODEを割り当てます。MODEは通常のUnix 8進表記に従います。たとえばMODE="0660"、所有者とグループに読み取り/書き込み権限を与えます。 man udevすべての詳細があります。

あなたはそのようなルールの多くの例を見つけることができます /lib/udev/rules.d/91-permissions.rules

システムにudevルールを追加する方法

ルールを決定したら、ルールを追加するだけです。debian派生システムで、ディレクトリに移動して/etc/udev/rules.dファイルを作成します。ファイルはソート順に実行されます。したがって、ルールファイルを最後に読み取るようにして、以前のファイルを上書きするには、のような名前を試してください99-instruments.rules。次に、ルールをそのファイルに1行に1つずつ入れます。(必要に応じて、シェルと同じように、行の最後にバックスラッシュを置くことで行を拡張できます。)

したがって、ttyデバイスのグループと権限を変更する場合、ファイル/etc/udev/rules.d/99-instruments.rulesは次の1行で構成できます。

SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"

新しいファイル自体に通常の権限があることを確認するには:

sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules

ファイルを作成した後、udevdがそれを自動的に読み取る場合があります。そうでない場合は、次のコマンドでファイルを強制的に再読み取りできます。

udevadm control --reload-rules

udevがデバイスを分類する方法の詳細

どのデバイスがどのルールに応答するかをより細かく制御したい場合は、/ sys /を調べることにより、udevがデバイスをどのように認識するかについて詳しく知ることができます。現時点では、ttyUSBまたはHPIBを備えたマシンにアクセスできないので、ディスクsdaの例を作ってみましょう。実行:

udevadm info --attribute-walk --path=/sys/block/sda

これにより、次のような多くの情報が得られます。

. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .

これらの行はすべてif、ルールでas 句を使用するのに適した形式です。したがって、たとえば、取り外し不可とマークされているすべてのブロックデバイスの所有権を変更するには、次のルールを使用します。

SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024

からの情報を使用してudevadm、対象のデバイスを具体的に対象とするルールを作成できます。


最初の例では、MODE =
Jim Hunziker

1
@JimHunzikerありがとうございます。入力ミスが修正されました。
John1024

4

ルールをジョンのものより少し制限することをお勧めします。たとえば、次のようなファイルを作成します/etc/udev/rules.d/99-tty-dialout.rules

SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"

を使用udevadmして、デバイスSUBSYSTEM==KERNEL==値を決定できます。例えば:

$ udevadm info -a -n /dev/tty0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/virtual/tty/tty0':
    KERNEL=="tty0"
    SUBSYSTEM=="tty"
    DRIVER==""
    ATTR{active}=="tty1"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.