Usuaris i grups a Linux

La comanda useradd a Linux: crear usuaris des del terminal i en scripts



La comanda useradd crea comptes d’usuari a Linux. És l’eina de baix nivell del paquet shadow i és present a totes les distribucions: Debian, Ubuntu, RHEL, Rocky, Fedora, Arch… A diferència d’adduser de Debian, no pregunta res: fa exactament el que li indiques amb les opcions i agafa la resta de valors de la configuració del sistema. Per això és la que es fa servir en scripts.

Sintaxi

sudo useradd [opcions] usuari

Opcions més útils

OpcióQuè fa
-mCrea el directori personal i hi copia /etc/skel
-MNo crea el directori personal
-d dirDirectori personal (per defecte, /home/usuari)
-s shellShell d’inici, per exemple /bin/bash o /usr/sbin/nologin
-c "text"Comentari (camp GECOS), normalment el nom complet
-g grupGrup primari (ha d’existir)
-G grup1,grup2Grups secundaris
-u UIDUID concret
-e AAAA-MM-DDData de caducitat del compte
-rCrea un usuari de sistema (UID per sota de 1000)
-k dirDirectori plantilla alternatiu a /etc/skel (amb -m)
-p hashContrasenya ja xifrada (no la contrasenya en clar)
-DMostra (o canvia) els valors per defecte

Què fa useradd per defecte

Depèn de la distribució, i aquesta és la font de confusions més habitual:

Debian / UbuntuRHEL / Rocky / Fedora
Crea el directori personalNo, si no poses -mSí (CREATE_HOME yes a /etc/login.defs)
Shell per defecteEl que digui SHELL a /etc/default/useradd (a Debian, /bin/sh si no s’ha canviat)/bin/bash
Crea un grup amb el nom de l’usuariSíSí
ContrasenyaCap: el compte queda bloquejatCap: el compte queda bloquejat

Per no dependre de la distribució, indica sempre -m i -s explícitament. I pots consultar els valors per defecte amb useradd -D (aquesta és la sortida d’un Debian 13 acabat d’instal·lar):

$ useradd -D
GROUP=100
GROUPS=
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
USRSKEL=/usr/etc/skel
CREATE_MAIL_SPOOL=no
LOG_INIT=yes

Exemples

Crear un usuari amb directori personal i Bash, i posar-li contrasenya:

sudo useradd -m -s /bin/bash joan
sudo passwd joan

Fins que no li poses contrasenya, el compte existeix però no pot entrar amb contrasenya.

Crear un usuari complet en una sola línia:

sudo useradd -m -c "Anna Puig" -s /bin/bash -G sudo anna

Comprovar el resultat:

$ getent passwd anna
anna:x:1004:1004:Anna Puig:/home/anna:/bin/bash
$ id anna
uid=1004(anna) gid=1004(anna) groups=1004(anna),27(sudo)

Amb un grup primari existent i grups secundaris:

sudo useradd -m -g comptabilitat -G vendes,users maria

Un compte temporal que caduca a final d’any:

sudo useradd -m -e 2026-12-31 becari

Un usuari de sistema per a un servei, sense directori ni sessió:

sudo useradd -r -M -s /usr/sbin/nologin servei

Un usuari que fa servir una plantilla de fitxers diferent:

sudo useradd -m -k /etc/skel-alumnes -s /bin/bash alumne1

Posar la contrasenya en un script

L’opció -p espera la contrasenya ja xifrada (un hash). Si hi poses la contrasenya en clar, useradd la desarà tal qual a /etc/shadow i no podràs entrar. A més, el que passes per la línia de comandes queda visible a l’historial i a la llista de processos.

En un script és millor crear l’usuari i després assignar la contrasenya amb chpasswd, que la llegeix de l’entrada estàndard:

sudo useradd -m -s /bin/bash joan
echo 'joan:UnaContrasenyaLlarga' | sudo chpasswd
sudo chage -d 0 joan     # l'obliga a canviar-la el primer cop que entri

Compte amb…

  • Noms d’usuari: en minúscules, sense espais ni accents, començant per una lletra.
  • -g vs -G: -g és el grup primari (només un); -G són els grups secundaris.
  • Si t’has oblidat de -m: el compte existeix però no té directori. Pots crear-lo a posteriori amb sudo mkhomedir_helper joan (Debian/Ubuntu) o copiant /etc/skel a mà i ajustant-ne el propietari amb chown -R.
  • Per esborrar un usuari: sudo userdel joan; amb -r també esborra el seu directori personal i la bústia de correu.

Comandes relacionades