Usuaris i grups a Linux

La comanda usermod -aG a Linux: afegir un usuari a diversos grups



Aquesta comanda afegeix un usuari a diversos grups de cop, sense treure’l dels que ja té. És la manera habitual de donar-li accés a dispositius: en aquest cas, a dispositius extraïbles (plugdev) i als ports sèrie (dialout), per exemple per programar un Arduino o fer servir un mòdem o un adaptador USB-sèrie.

sudo usermod -aG plugdev,dialout,pip usuari1

Peça a peça

PartQuè fa
sudoCal ser administrador per canviar els grups d’un usuari
usermodModifica un compte existent
-aAppend: afegeix els grups als que l’usuari ja té
-G plugdev,dialout,pipLlista de grups secundaris, separats per comes i sense espais
usuari1L’usuari que es modifica

La -a és imprescindible

Sense -a, l’opció -G substitueix tots els grups secundaris de l’usuari per la llista que indiques. És un error clàssic i pot fer que un administrador perdi l’accés a sudo:

$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),27(sudo),2001(vendes)

$ sudo usermod -G dialout joan       # sense -a!
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),20(dialout)

Amb -aG, en canvi, s’hi afegeix i prou:

$ sudo usermod -aG dialout joan
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),20(dialout),27(sudo),2001(vendes)

El grup pip no existeix

Aquest exemple ve d’una versió antiga del blog, que deia que pip era un grup per accedir als paquets de Python. No és cert: no hi ha cap grup pip estàndard a Debian, Ubuntu ni Raspberry Pi OS, i per instal·lar paquets amb pip no cal cap grup especial.

I això té conseqüències: si algun dels grups de la llista no existeix, usermod dona error i no afegeix l’usuari a cap:

$ sudo usermod -aG plugdev,dialout,pip usuari1
usermod: group 'pip' does not exist
$ id usuari1
uid=1000(usuari1) gid=1000(usuari1) groups=1000(usuari1)

La versió correcta és, doncs:

sudo usermod -aG plugdev,dialout usuari1

Grups útils per a dispositius

GrupDona accés a
dialoutPorts sèrie: /dev/ttyUSB*, /dev/ttyACM* (Arduino, ESP32, mòdems)
plugdevAlguns dispositius extraïbles i USB
videoCàmeres i acceleració de vídeo
audioDispositius de so
lpImpressores
gpio, i2c, spiEls busos del Raspberry Pi (només a Raspberry Pi OS)
dockerEl dimoni de Docker (equival a tenir accés de root: dona’l amb compte)

Per veure quins grups té un dispositiu concret, mira’n el grup amb ls -l:

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Oct  3 17:40 /dev/ttyUSB0

El canvi no s’aplica a la sessió oberta

Els grups d’un procés es fixen quan inicies la sessió. Després de l’usermod, l’usuari ha de tancar la sessió i tornar a entrar (o reiniciar, si és una sessió gràfica). Mentrestant, id usuari1 ja mostrarà els grups nous, però id sense arguments, a la sessió antiga, encara no.

Si no vols sortir, pots obrir un shell amb el grup nou amb newgrp:

newgrp dialout

Alternatives

# Debian/Ubuntu: d'un grup en un
sudo adduser usuari1 dialout

# Qualsevol distribució: d'un grup en un
sudo gpasswd -a usuari1 dialout

# Treure'l d'un grup
sudo gpasswd -d usuari1 dialout

Comandes relacionades