Consenti all'utente non root di leggere / scrivere / dev file


8

Nella mia /devcartella, vorrei che i seguenti file fossero leggibili e scrivibili dall'utente:

/dev/ttyUSB0
/dev/gpib0

Come posso fare questo senza usare chgrp? Posso modificare /etc/udev/rules.dma non conosco la sintassi.


1
Perché vuoi dare autorizzazioni di lettura / scrittura a questi?
slm

Sto usando questo PC come controller per diversi dispositivi di test e strumentazione (oscilloscopi, misuratori di potenza, ecc.) Tutte le letture / scritture saranno eseguite da script e librerie Python. Nessuna lettura / scrittura di basso livello verrà effettuata dall'utente stesso. Supponiamo che il sistema sia infinitamente sicuro. Vorrei che fosse conveniente per i miei colleghi di laboratorio scrivere script per gli strumenti.
Kit

3
Perché non dare ai colleghi l'accesso sudo invece?
slm

Risposte:


11

Come sono strutturate le regole udev

Per i dispositivi che rientrano nel sottosistema tty, è possibile impostare il loro gruppo come segue:

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

Si noti che, proprio come nella programmazione comune, ==è un test per l'uguaglianza mentre =è un compito. Quindi, l'istruzione precedente si traduce in "if SUBSYSTEM=="tty"then assegnato GROUP="dialout". Un'istruzione può avere più test, che sono messi insieme e più assegnazioni.

Se si desidera modificare le autorizzazioni di lettura-scrittura-esecuzione, assegnare MODE invece di GROUP dove MODE segue la solita notazione ottale Unix, ad esempio MODE="0660"concede al proprietario e al gruppo le autorizzazioni di lettura-scrittura. man udevha tutti i dettagli.

Puoi trovare molti esempi di tali regole in /lib/udev/rules.d/91-permissions.rules

Come aggiungere una regola udev al tuo sistema

Una volta che hai deciso cosa vuoi che sia la tua regola, è abbastanza semplice aggiungerla. Su un sistema derivato da Debian, vai alla directory /etc/udev/rules.de crea un file. I file vengono eseguiti nell'ordinamento. Quindi, per rendere l'ultimo file da leggere, sovrascrivendo quelli precedenti, prova un nome come 99-instruments.rules. Quindi inserisci le tue regole in quel file, una per riga. (Se necessario, le linee possono essere estese inserendo una barra rovesciata alla fine della linea, proprio come nella shell.)

Quindi, se si desidera modificare il gruppo e le autorizzazioni sui dispositivi tty, il file /etc/udev/rules.d/99-instruments.rulespotrebbe essere costituito da un'unica riga:

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

Per assicurare che il tuo nuovo file stesso abbia le consuete autorizzazioni:

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

Dopo aver creato il file, udevd potrebbe leggerlo automaticamente. In caso contrario, puoi forzarlo a rileggere i suoi file con:

udevadm control --reload-rules

Maggiori informazioni su come udev classifica i dispositivi

Se vuoi avere un controllo più preciso su quali dispositivi rispondono a quali regole, puoi saperne di più su come udev vede i tuoi dispositivi esaminando / sys /. In questo momento, non ho accesso a una macchina con un ttyUSB o un HPIB, quindi facciamo un esempio di disk sda. Correre:

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

Questo fornisce molte informazioni che assomigliano a:

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

Queste righe sono tutte nella forma adatta all'uso come ifclausole nelle regole. Quindi, ad esempio, per modificare la proprietà su tutti i dispositivi a blocchi contrassegnati come non rimovibili, utilizzeremo la regola:

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

Con le informazioni provenienti da udevadm, si possono sviluppare regole che possono colpire specificamente i dispositivi di interesse.


Il primo esempio dovrebbe avere una virgola, non un punto, prima di MODE =
Jim Hunziker il

1
@JimHunziker Grazie per quello. L'errore di battitura è ora corretto.
Giovanni 1024

4

Penso che suggerirei di rendere la regola un po 'più restrittiva di quella di John. Ad esempio, creare un file come /etc/udev/rules.d/99-tty-dialout.rules:

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

È possibile utilizzare udevadmper determinare dispositivi SUBSYSTEM==e KERNEL==valori. Per esempio:

$ 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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.