Fitxers /etc/passwd, /etc/shadow i login.defs | Iespai
Informació del sistema Linux

Els fitxers d’usuaris i contrasenyes de Linux: passwd, shadow, group i login.defs



A Unix i Linux, gairebé tota la configuració del sistema són fitxers de text dins de /etc. Els que regulen els usuaris, els grups i les contrasenyes són dels més importants: de què hi ha en aquests fitxers depèn qui pot entrar al sistema, amb quins permisos i cada quant ha de canviar la contrasenya. En aquest article t’explico què conté cadascun, com llegir-los i com modificar-los sense riscos.

Resum

FitxerQuè contéPermisos habituals
/etc/passwdEls comptes d’usuari (sense contrasenyes)644: el pot llegir tothom
/etc/shadowLes contrasenyes xifrades i la seva caducitat640 (root i el grup shadow) o 000 a RHEL
/etc/groupEls grups i qui hi pertany644
/etc/gshadowContrasenyes i administradors dels grupsCom /etc/shadow
/etc/login.defsValors per defecte per als comptes nous644
/etc/default/useraddValors per defecte de useradd (shell, directori base…)644

/etc/passwd

Una línia per compte, amb set camps separats per ::

$ grep oscar /etc/passwd
oscar:x:1000:1000:Raspberry Pi OS:/home/oscar:/bin/bash
CampValorSignificat
1oscarNom d’usuari
2xLa contrasenya és a /etc/shadow
31000UID (identificador de l’usuari)
41000GID del grup principal
5Raspberry Pi OSComentari o nom complet (camp GECOS)
6/home/oscarDirectori personal
7/bin/bashShell d’inici de sessió
  • L’UID 0 és root. Els usuaris del sistema (serveis) tenen UID baixos (per sota de 1000 a Debian, Ubuntu i RHEL) i els usuaris normals, a partir de 1000.
  • Els comptes de servei solen tenir com a shell /usr/sbin/nologin o /bin/false, de manera que no s’hi pot iniciar sessió.
  • Antigament la contrasenya xifrada era en aquest segon camp, però com que /etc/passwd l’ha de poder llegir tothom, es va traslladar a /etc/shadow.

/etc/shadow

Conté la contrasenya xifrada (en realitat, un hash) i les dades de caducitat. Només el pot llegir root, així que per consultar-lo cal sudo. Una entrada té aquest aspecte:

joan:$y$j9T$bHF8IeIZdbdp/Pal5WG7u1$i54ZQy8HwCAUZkqlggGetAls4mmNt6WMo3KYGuokAo5:20729:0:99999:7:::
CampValorSignificat
1joanNom d’usuari
2$y$j9T$…Hash de la contrasenya. ! o * al davant: compte bloquejat o sense contrasenya
320729Darrer canvi de contrasenya, en dies des de l’1 de gener de 1970
40Dies mínims entre canvis
599999Dies màxims de validesa (99999 = no caduca)
67Dies d’avís abans que caduqui
7(buit)Dies de gràcia després que caduqui abans de bloquejar el compte
8(buit)Data de caducitat del compte
9(buit)Reservat

El prefix del hash indica l’algorisme: $y$ és yescrypt (el que fan servir per defecte Debian 11 i posteriors i Ubuntu 22.04 i posteriors), $6$ és SHA-512 (RHEL, Rocky, Alma) i $1$ és MD5, que és insegur i convé no trobar mai.

No cal comptar dies a mà: chage -l t’ho mostra en format llegible:

$ chage -l oscar
Last password change     : Jun 18, 2026
Password expires     : never
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires : 7

/etc/group i /etc/gshadow

$ grep -E '^(sudo|oscar):' /etc/group
sudo:x:27:oscar
oscar:x:1000:

Els camps són: nom del grup, contrasenya (x, a /etc/gshadow), GID i la llista de membres secundaris separats per comes. Fixa’t que el grup principal d’un usuari (el de /etc/passwd) no cal que hi aparegui com a membre. Per veure tots els grups d’un usuari, el més fàcil és la comanda id.

/etc/login.defs

Defineix els valors per defecte que fan servir useradd, passwd i companyia. Les línies més interessants:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   7
UID_MIN         1000
ENCRYPT_METHOD  YESCRYPT
HOME_MODE       0700
  • PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE: caducitat de les contrasenyes (aquí: canviar-la cada 90 dies, no abans d’un dia, i avisar 7 dies abans).
  • UID_MIN: primer UID per als usuaris normals.
  • ENCRYPT_METHOD: algorisme per xifrar les contrasenyes noves.
  • HOME_MODE: permisos dels directoris personals nous (0700: només el propietari).

Compte: els valors de caducitat només s’apliquen als comptes que es creen a partir d’aquell moment. Per canviar-los en un compte existent, fes servir chage:

sudo chage -M 90 -m 1 -W 7 joan

Tampoc és aquí on es controla la complexitat de les contrasenyes (longitud mínima, majúscules, xifres…): això ho fa el mòdul PAM pam_pwquality, configurat a /etc/security/pwquality.conf (per exemple, minlen = 12). A Debian i Ubuntu cal instal·lar el paquet libpam-pwquality; a RHEL i derivades ja ve activat.

Per cert, avui moltes guies de seguretat (entre elles les del NIST) desaconsellen obligar a canviar la contrasenya periòdicament si no hi ha sospita que s’hagi filtrat: és més útil exigir contrasenyes llargues i activar la doble autenticació.

Una correcció: /etc/default/passwd

L’original d’aquest article parlava de /etc/default/passwd amb opcions com PASS_MAX_LEN 12. Aquest fitxer no existeix a Debian, Ubuntu, RHEL ni Fedora (és propi d’altres sistemes, com Solaris o openSUSE), i una longitud màxima de 12 caràcters seria una mala idea: les contrasenyes llargues són més segures. A Linux, el fitxer equivalent per als valors per defecte dels comptes nous és /etc/default/useradd:

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

Pel que fa a l’umask per defecte dels usuaris, es defineix a /etc/login.defs (UMASK 022 a RHEL); a Debian 13 aquesta línia ja no hi és i s’aplica el valor per defecte del sistema (normalment 022). Ho tens explicat a la comanda umask.

Com editar aquests fitxers sense riscos

Una errada en /etc/passwd o /etc/shadow et pot deixar sense poder entrar al sistema. Per això:

  • Fes servir les comandes, no l’editor: useradd, usermod, passwd, chage, groupadd, gpasswd…
  • Si de totes maneres has d’editar-los a mà, fes servir sudo vipw (per a passwd, i vipw -s per a shadow) i sudo vigr (per a group, i vigr -s per a gshadow): bloquegen el fitxer mentre l’edites i eviten que es corrompi.
  • Després, comprova que tot és coherent amb sudo pwck -r i sudo grpck -r (-r: només llegeix, no corregeix res).
  • Mantén una sessió de root oberta mentre fas proves, per si t’has de desfer d’un error.

Posts relacionats

Esta web usa cookies.