Izinkan pengguna non-root untuk membaca / menulis / dev file

8

Dalam /devfolder saya , saya ingin file-file berikut dapat dibaca dan ditulis pengguna:

/dev/ttyUSB0
/dev/gpib0

Bagaimana saya melakukan ini tanpa menggunakan chgrp? Saya dapat mengedit /etc/udev/rules.dtetapi saya tidak tahu sintaksnya.

Kit
sumber
1
Mengapa Anda ingin memberikan izin baca / tulis untuk ini?
slm
Saya menggunakan PC ini sebagai pengontrol untuk beberapa perangkat uji & instrumentasi (osiloskop, meteran listrik, dll.) Semua baca / tulis akan dilakukan oleh skrip dan pustaka Python. Tidak ada membaca / menulis tingkat rendah yang akan dilakukan oleh pengguna sendiri. Mari kita asumsikan bahwa sistem ini sangat aman. Saya ingin membuatnya nyaman bagi rekan lab saya untuk menulis skrip untuk instrumen.
Kit
3
Mengapa tidak memberi akses rekan saja saja?
slm

Jawaban:

11

Bagaimana aturan udev terstruktur

Untuk perangkat yang termasuk dalam subsistem tty, Anda dapat mengatur grup mereka sebagai berikut:

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

Perhatikan bahwa, seperti dalam pemrograman umum, ==adalah ujian untuk kesetaraan sementara =merupakan tugas. Jadi, pernyataan di atas diterjemahkan menjadi "jika SUBSYSTEM=="tty"kemudian menetapkan GROUP="dialout". Pernyataan mungkin memiliki beberapa tes, yang and-ed bersama, dan beberapa tugas.

Jika Anda ingin mengubah izin baca-tulis-jalankan, maka tetapkan MODE alih-alih GROUP di mana MODE mengikuti notasi oktal Unix yang biasa, misalnya MODE="0660"memberikan pemilik dan izin baca-tulis grup. man udevmemiliki semua detail.

Anda dapat menemukan banyak contoh aturan semacam itu di /lib/udev/rules.d/91-permissions.rules

Cara menambahkan aturan udev ke sistem Anda

Setelah Anda menentukan aturan yang Anda inginkan, cukup sederhana untuk menambahkannya. Pada sistem turunan debian, buka direktori /etc/udev/rules.ddan buat file. File dijalankan dalam urutan. Jadi, untuk membuat file aturan Anda yang terakhir dibaca, menimpa yang sebelumnya, coba nama seperti 99-instruments.rules. Kemudian masukkan aturan Anda dalam file itu, satu per baris. (Jika perlu, garis dapat diperpanjang dengan meletakkan backslash di akhir baris, sama seperti di shell.)

Jadi, jika Anda ingin mengubah grup dan izin pada perangkat tty, file Anda /etc/udev/rules.d/99-instruments.rulesdapat terdiri dari satu baris:

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

Untuk memastikan bahwa file baru Anda sendiri memiliki izin seperti biasa:

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

Setelah Anda membuat file Anda, udevd dapat membacanya secara otomatis. Jika tidak, Anda bisa memaksanya membaca ulang file-file-nya dengan:

udevadm control --reload-rules

Lebih lanjut tentang bagaimana udev mengklasifikasikan perangkat

Jika Anda ingin mendapatkan kontrol yang lebih baik atas perangkat mana yang merespons aturan mana, Anda dapat mempelajari lebih lanjut tentang bagaimana udev melihat perangkat Anda dengan membaca dengan teliti / sys /. Pada saat ini, saya tidak memiliki akses ke mesin dengan ttyUSB atau HPIB, jadi mari kita buat contoh disk sda. Lari:

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

Ini memberikan banyak informasi seperti:

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

Garis-garis ini semuanya dalam bentuk yang sesuai untuk digunakan sebagai ifklausa dalam aturan. Jadi, misalnya, untuk mengubah kepemilikan pada semua perangkat blok yang ditandai sebagai tidak dapat dilepas, kami akan menggunakan aturan:

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

Dengan informasi dari udevadm, seseorang dapat mengembangkan aturan yang dapat menargetkan secara khusus perangkat yang menarik.

John1024
sumber
Contoh pertama harus memiliki koma, bukan titik, sebelum MODE =
Jim Hunziker
1
@ JimHunziker Terima kasih untuk itu. Kesalahan ketik sekarang diperbaiki.
John1024
4

Saya pikir saya akan menyarankan membuat aturan sedikit lebih ketat daripada aturan John. Misalnya membuat file seperti /etc/udev/rules.d/99-tty-dialout.rules:

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

Anda dapat menggunakan udevadmuntuk menentukan perangkat SUBSYSTEM==dan KERNEL==nilai. Sebagai contoh:

$ 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"
slm
sumber