Usuaris i grups a Linux

Usuaris i grups a Linux: conceptes bàsics i gestió



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

TipusUID habitualPer a què serveix
root0Superusuari: pot fer qualsevol cosa al sistema
Usuaris de sistema1-999Serveis i dimonis (www-data, sshd, mysql…), sense sessió interactiva
Usuaris normals1000 o mésPersones 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:

GrupPer a què serveix
sudo (Debian, Ubuntu) / wheel (RHEL, Fedora)Pot fer servir sudo per executar comandes com a administrador
admPot llegir molts fitxers de registre de /var/log
usersGrup genèric per a usuaris normals
dialoutAccés als ports sèrie (mòdems, Arduino, adaptadors USB-sèrie)
plugdevAccés a alguns dispositius extraïbles
dockerPot fer servir Docker (equival a tenir accés de root)

On es guarda tot

FitxerContingutQui el pot llegir
/etc/passwdUn usuari per línia: nom, UID, GID primari, comentari, directori personal i shellTothom
/etc/shadowHash de la contrasenya i dades de caducitatNomés root
/etc/groupUn grup per línia: nom, GID i membres secundarisTothom
/etc/gshadowContrasenyes i administradors dels grupsNomé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).

TascaComanda
Crear un usuari (Debian/Ubuntu, interactiu)adduser
Crear un usuari (qualsevol distribució)useradd
Modificar un usuariusermod
Esborrar un usuariuserdel (o deluser a Debian/Ubuntu)
Canviar una contrasenyapasswd
Caducitat de contrasenyes i compteschage
Crear, modificar i esborrar grupsgroupadd, groupmod i groupdel
Afegir o treure membres d’un grupusermod -aG, gpasswd -a / gpasswd -d
Comprovar la coherència dels fitxerspwck i grpck
Canviar de grup primari temporalmentnewgrp
Canviar el grup d’un fitxerchgrp

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 sudo quan 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 0 o userdel).
  • Revisa qui és als grups privilegiats (sudo, wheel, docker, adm) de tant en tant: getent group sudo.

Articles relacionats