Linux és un sistema multiusuari: diverses persones (i molts serveis) poden fer servir la mateixa màquina alhora, cadascú amb els seus fitxers i els seus permisos. Tot això es basa en dues peces: els usuaris i els grups. Entendre com funcionen és imprescindible per administrar un servidor, compartir directoris o simplement saber per què et surt un Permission denied.
En aquest article t’explico els conceptes bàsics, on es guarda la informació i quines comandes fas servir per gestionar-ho tot.
Usuaris
Un usuari és una identitat amb què s’executen processos i que és propietària de fitxers. Cada usuari té:
- Nom d’usuari (login): el nom amb què entres al sistema, per exemple
joan. Ha de ser únic. - UID (User ID): un número únic. El sistema treballa internament amb l’UID, no amb el nom; per això, si canvies l’UID d’un usuari, els fitxers que tenia continuen apuntant al número antic.
- Grup primari: el grup que tindran per defecte els fitxers que creï.
- Directori personal (home): normalment
/home/joan. - Shell d’inici: el programa que s’obre quan entra, normalment
/bin/bash. Els comptes que no han d’iniciar sessió tenen/usr/sbin/nologin. - Contrasenya: es guarda xifrada (com a hash) a
/etc/shadow, mai en clar.
Tipus d’usuaris
| Tipus | UID habitual | Per a què serveix |
|---|---|---|
root | 0 | Superusuari: pot fer qualsevol cosa al sistema |
| Usuaris de sistema | 1-999 | Serveis i dimonis (www-data, sshd, mysql…), sense sessió interactiva |
| Usuaris normals | 1000 o més | Persones que fan servir el sistema |
Els rangs es defineixen a /etc/login.defs (UID_MIN, UID_MAX) i, a Debian i Ubuntu, també a /etc/adduser.conf.
Grups
Un grup és un conjunt d’usuaris que comparteixen permisos sobre fitxers i recursos. Cada grup té un nom i un GID (Group ID) únics.
- Grup primari: cada usuari en té exactament un. A les distribucions actuals, quan crees un usuari es crea alhora un grup amb el mateix nom (és el que s’anomena user private group), però no és obligatori: el grup primari pot ser qualsevol altre.
- Grups secundaris (o suplementaris): un usuari pot pertànyer a tants com vulguis. Són els que li donen accés a recursos compartits.
Alguns grups habituals:
| Grup | Per a què serveix |
|---|---|
sudo (Debian, Ubuntu) / wheel (RHEL, Fedora) | Pot fer servir sudo per executar comandes com a administrador |
adm | Pot llegir molts fitxers de registre de /var/log |
users | Grup genèric per a usuaris normals |
dialout | Accés als ports sèrie (mòdems, Arduino, adaptadors USB-sèrie) |
plugdev | Accés a alguns dispositius extraïbles |
docker | Pot fer servir Docker (equival a tenir accés de root) |
On es guarda tot
| Fitxer | Contingut | Qui el pot llegir |
|---|---|---|
/etc/passwd | Un usuari per línia: nom, UID, GID primari, comentari, directori personal i shell | Tothom |
/etc/shadow | Hash de la contrasenya i dades de caducitat | Només root |
/etc/group | Un grup per línia: nom, GID i membres secundaris | Tothom |
/etc/gshadow | Contrasenyes i administradors dels grups | Només root |
Una línia de /etc/passwd té set camps separats per dos punts:
joan:x:1001:1001:Joan Puig:/home/joan:/bin/bash
Nom, x (la contrasenya és a /etc/shadow), UID, GID primari, comentari (camp GECOS, normalment el nom complet), directori personal i shell.
I una de /etc/group:
projecte:x:1005:joan,maria
Nom del grup, x, GID i la llista de membres secundaris. Fixa’t que els usuaris que tenen aquest grup com a primari no hi apareixen.
No editis aquests fitxers a mà amb un editor qualsevol: fes servir les comandes de més avall o, si de debò cal, vipw i vigr, que bloquegen el fitxer mentre l’edites.
Consultar usuaris i grups
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),27(sudo),1005(projecte)
$ groups joan
joan : joan sudo projecte
$ getent passwd joan
joan:x:1001:1001:Joan Puig:/home/joan:/bin/bash
$ getent group projecte
projecte:x:1005:joan,maria
getent és millor que fer grep a /etc/passwd, perquè també troba els usuaris que vénen d’altres fonts (LDAP, Active Directory, systemd-homed…). Sense arguments addicionals, id mostra les dades de l’usuari actual, i whoami només el nom.
Comandes per gestionar usuaris i grups
Totes les que modifiquen alguna cosa necessiten privilegis d’administrador (sudo).
| Tasca | Comanda |
|---|---|
| Crear un usuari (Debian/Ubuntu, interactiu) | adduser |
| Crear un usuari (qualsevol distribució) | useradd |
| Modificar un usuari | usermod |
| Esborrar un usuari | userdel (o deluser a Debian/Ubuntu) |
| Canviar una contrasenya | passwd |
| Caducitat de contrasenyes i comptes | chage |
| Crear, modificar i esborrar grups | groupadd, groupmod i groupdel |
| Afegir o treure membres d’un grup | usermod -aG, gpasswd -a / gpasswd -d |
| Comprovar la coherència dels fitxers | pwck i grpck |
| Canviar de grup primari temporalment | newgrp |
| Canviar el grup d’un fitxer | chgrp |
Un exemple complet
Crear un grup per a un projecte, un usuari nou que en formi part i un directori compartit:
# Grup i usuari
sudo groupadd projecte
sudo adduser joan # a RHEL/Fedora: sudo useradd -m joan && sudo passwd joan
sudo usermod -aG projecte joan
sudo usermod -aG projecte maria
# Directori compartit: grup projecte, escriptura per al grup
# i bit setgid perquè els fitxers nous heretin el grup
sudo mkdir /srv/projecte
sudo chgrp projecte /srv/projecte
sudo chmod 2775 /srv/projecte
Recorda que els canvis de grups d’un usuari no s’apliquen a les sessions que ja té obertes: cal que surti i torni a entrar (o que faci servir newgrp).
Bones pràctiques
- No treballis com a root: fes servir un usuari normal i
sudoquan calgui. - Dona permisos per grups, no usuari per usuari. És més fàcil d’entendre i de mantenir.
- Esborra o bloqueja els comptes que ja no es facin servir (
usermod -L,chage -E 0ouserdel). - Revisa qui és als grups privilegiats (
sudo,wheel,docker,adm) de tant en tant:getent group sudo.
Articles relacionats
- Guia de permisos de fitxers a Linux
chmodichown: canviar permisos i propietaris.- Diferències entre
adduseriuseradd - Automatitzar la creació d’usuaris amb scripts de Bash