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
| Fitxer | Què conté | Permisos habituals |
|---|---|---|
/etc/passwd | Els comptes d’usuari (sense contrasenyes) | 644: el pot llegir tothom |
/etc/shadow | Les contrasenyes xifrades i la seva caducitat | 640 (root i el grup shadow) o 000 a RHEL |
/etc/group | Els grups i qui hi pertany | 644 |
/etc/gshadow | Contrasenyes i administradors dels grups | Com /etc/shadow |
/etc/login.defs | Valors per defecte per als comptes nous | 644 |
/etc/default/useradd | Valors 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 | Camp | Valor | Significat |
|---|---|---|
| 1 | oscar | Nom d’usuari |
| 2 | x | La contrasenya és a /etc/shadow |
| 3 | 1000 | UID (identificador de l’usuari) |
| 4 | 1000 | GID del grup principal |
| 5 | Raspberry Pi OS | Comentari o nom complet (camp GECOS) |
| 6 | /home/oscar | Directori personal |
| 7 | /bin/bash | Shell d’inici de sessió |
- L’UID
0ésroot. 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/nologino/bin/false, de manera que no s’hi pot iniciar sessió. - Antigament la contrasenya xifrada era en aquest segon camp, però com que
/etc/passwdl’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::: | Camp | Valor | Significat |
|---|---|---|
| 1 | joan | Nom d’usuari |
| 2 | $y$j9T$… | Hash de la contrasenya. ! o * al davant: compte bloquejat o sense contrasenya |
| 3 | 20729 | Darrer canvi de contrasenya, en dies des de l’1 de gener de 1970 |
| 4 | 0 | Dies mínims entre canvis |
| 5 | 99999 | Dies màxims de validesa (99999 = no caduca) |
| 6 | 7 | Dies 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 apasswd, ivipw -sper ashadow) isudo vigr(per agroup, ivigr -sper agshadow): bloquegen el fitxer mentre l’edites i eviten que es corrompi. - Després, comprova que tot és coherent amb
sudo pwck -risudo grpck -r(-r: només llegeix, no corregeix res). - Mantén una sessió de
rootoberta mentre fas proves, per si t’has de desfer d’un error.
Posts relacionats
Esta web usa cookies.