Guia dels permisos de fitxers a Linux | Iespai

Guia dels permisos de fitxers a Linux: lectura, escriptura, execució i bits especials



Els permisos són la primera línia de seguretat de Linux: decideixen qui pot llegir, modificar o executar cada fitxer i cada directori. Entendre’ls t’estalvia molts Permission denied i, sobretot, t’evita la temptació de solucionar-ho tot amb un chmod 777. En aquesta guia veuràs com funcionen, com es llegeixen i com es canvien.


Conceptes bàsics

Cada fitxer i cada directori té un propietari (un usuari) i un grup, i tres jocs de permisos:

  • Propietari (user, u): el que pot fer l’usuari propietari.
  • Grup (g): el que poden fer els membres del grup del fitxer.
  • Altres (others, o): el que pot fer qualsevol altre usuari.

Linux mira només un d’aquests jocs: si ets el propietari, s’apliquen els permisos de propietari (encara que el grup en tingui més); si no ho ets però ets del grup, els de grup; i si no, els d’altres. L’usuari root se salta aquestes comprovacions.

Cada joc té tres permisos bàsics, que no signifiquen el mateix en un fitxer que en un directori:

PermísEn un fitxerEn un directori
r (lectura)Llegir-ne el contingutVeure la llista de noms que conté (ls)
w (escriptura)Modificar-ne el contingutCrear, esborrar i canviar el nom dels fitxers que conté
x (execució)Executar-lo com a programa o scriptEntrar-hi (cd) i accedir als fitxers que conté

Dues conseqüències que sorprenen sovint:

  • Per esborrar un fitxer el que compta és el permís d’escriptura del directori, no el del fitxer. Un fitxer de només lectura es pot esborrar si pots escriure al directori.
  • Un directori amb r però sense x permet veure els noms, però no accedir als fitxers ni veure’n els detalls:
$ ls -l dir
ls: cannot access 'dir/f.txt': Permission denied
total 0
-????????? ? ? ? ?            ? f.txt

Com es llegeixen

ls -l mostra els permisos al principi de cada línia:

$ ls -l script.sh
-rwxr-xr-- 1 oscar desenvolupament 1024 Oct  3 14:30 script.sh
PartValorSignificat
Tipus-- fitxer normal, d directori, l enllaç simbòlic
Propietarirwxoscar el pot llegir, modificar i executar
Grupr-xEls membres de desenvolupament el poden llegir i executar
Altresr--La resta d’usuaris només el poden llegir

Per veure’ls també en format numèric, fes servir stat:

$ stat -c '%a %A %n' script.sh
754 -rwxr-xr-- script.sh

Notació numèrica (octal)

Cada permís té un valor (r = 4, w = 2, x = 1) i se sumen per a cada joc. Així, 754 vol dir propietari 7 (rwx), grup 5 (r-x) i altres 4 (r--).

OctalSimbòlicDescripció
0---Cap permís
1--xExecució
2-w-Escriptura
3-wxEscriptura i execució
4r--Lectura
5r-xLectura i execució
6rw-Lectura i escriptura
7rwxLectura, escriptura i execució

Per exemple, chmod 644 informe.txt és el mateix que chmod u=rw,go=r informe.txt, i chmod 751 directori el mateix que chmod u=rwx,g=rx,o=x directori.


Notació simbòlica

Amb la notació simbòlica afegeixes o treus permisos concrets sense tocar la resta:

SímbolSignificatExemple
uPropietariu+x
gGrupg-w
oAltreso=r
aTots (u, g i o)a+r
+Afegeix permisosg+w
-Treu permisoso-rwx
=Fixa exactament els permisos indicatsu=rw
r, w, xLectura, escriptura, execucióu+rwx
XExecució només per a directoris (i fitxers que ja siguin executables)-R a+X
sSUID (amb u) o SGID (amb g)u+s, g+s
tBit sticky+t

La taula de l’original tenia diversos errors en aquesta part: S i T no són opcions de chmod per «esborrar» res, sinó lletres que ls -l mostra quan el bit especial està activat però el permís x corresponent no ho està; i t és el bit sticky, no el SGID.

Exemples:

chmod u+w informe.txt       # el propietari hi pot escriure
chmod g-x script.sh         # el grup ja no el pot executar
chmod o= directori/         # els altres no hi tenen cap permís
chmod u+s programa          # activa el SUID
chmod g-s directori/        # desactiva el SGID

L’original proposava chmod o=rw directori/ com a exemple per a un directori. Fixa’t que, sense x, aquells usuaris no podrien entrar al directori ni fer servir l’escriptura: en un directori, w sense x no serveix de res.


Els permisos especials

A més dels nou permisos bàsics, hi ha tres bits especials:

BitValor octalEn un fitxerEn un directoriEs veu com a
SUID4000S’executa amb els permisos del propietari(No té efecte a Linux)s a la x del propietari
SGID2000S’executa amb els permisos del grupEls fitxers nous hereten el grup del directoris a la x del grup
Sticky1000(No té efecte a Linux)Només el propietari d’un fitxer el pot esborrar o canviar-ne el nomt a la x d’altres

Els trobaràs a tot arreu:

$ ls -ld /tmp /usr/bin/passwd /var/mail
drwxrwxrwt 38 root root     880 Oct  3 23:53 /tmp
-rwsr-xr-x  1 root root  142424 Apr 19  2025 /usr/bin/passwd
drwxrwsr-x  2 root mail    4096 Jun 18 02:18 /var/mail

/tmp és de tothom però ningú no pot esborrar els fitxers dels altres (sticky); passwd s’executa com a root perquè qualsevol usuari pugui canviar la seva contrasenya (SUID); i el que es crea a /var/mail és del grup mail (SGID). En tens més detalls a els bits de permisos d’Unix i a chmod u+s.


Les eines

ComandaPer a què serveix
chmodCanviar els permisos
chownCanviar el propietari (i el grup)
chgrpCanviar el grup
umaskDecidir els permisos per defecte dels fitxers nous
ls -l, statVeure els permisos

Quan aquest model de tres jocs se’t queda curt (per exemple, si vols donar accés a un segon usuari concret sense canviar el grup), hi ha les ACL, amb setfacl i getfacl. Un + al final dels permisos a ls -l (-rw-r-----+) indica que el fitxer en té.


Casos habituals

  • Fitxers de configuració: normalment 644 (/etc/ssh/sshd_config), i 640 o 600 si contenen contrasenyes (/etc/shadow és 640, propietat de root i del grup shadow).
  • Scripts: necessiten el permís d’execució per llançar-los com a ./script.sh: chmod u+x script.sh (o 755 si els ha d’executar tothom).
  • Directoris personals: l’original deia que solen ser llegibles pels altres usuaris. Ja no és així: Debian 13 crea els directoris personals amb 700 i Ubuntu (des de la 21.04) amb 750, de manera que els altres usuaris no hi poden entrar.
  • Claus SSH: ~/.ssh amb 700 i la clau privada amb 600; si no, ssh no la fa servir.
  • Compartir fitxers amb altres usuaris: crea un grup, afegeix-hi els usuaris i fes servir un directori amb SGID (chmod 2770 compartit/) perquè tot el que s’hi creï sigui del grup.
  • Webs: directoris 755 i fitxers 644 (o 750/640 si el grup és el del servidor web). El servidor web hauria de poder llegir-ho tot però escriure només als directoris que calgui (pujades, memòria cau). L’original proposava fitxers 444 (r--r--r--): funciona, però és poc pràctic, perquè ni el propietari els pot editar sense canviar-ne els permisos.
  • Evita el 777: si un programa no pot escriure en un lloc, revisa el propietari i el grup abans d’obrir-ho a tothom.

Resum

Vull…Comanda
Veure els permisosls -l fitxer o stat -c '%a %A' fitxer
Fer executable un scriptchmod u+x script.sh
Que només jo pugui llegir un fitxerchmod 600 fitxer
Directoris 755 i fitxers 644 de manera recursivachmod -R u=rwX,go=rX directori/
Canviar el propietarisudo chown joan:joan fitxer
Que els fitxers nous no siguin llegibles per als altresumask 027

Articles relacionats

Esta web usa cookies.