web-dev-qa-db-ja.com

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

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

/dev/ttyUSB0
/dev/gpib0

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

8
Kit

Udevルールの構造

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

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

一般的なプログラミングと同様に、==は等価性のテストであり、=は代入です。したがって、上記のステートメントは、「if SUBSYSTEM=="tty"次に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句として使用するのに適した形式です。したがって、たとえば、取り外し不可とマークされているすべてのブロックデバイスの所有権を変更するには、次のルールを使用します。

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

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

11
John1024

ジョンのルールよりも少し制限を強くすることをお勧めします。たとえば、/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"
4
slm