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ís | En un fitxer | En un directori |
|---|---|---|
| r (lectura) | Llegir-ne el contingut | Veure la llista de noms que conté (ls) |
| w (escriptura) | Modificar-ne el contingut | Crear, esborrar i canviar el nom dels fitxers que conté |
| x (execució) | Executar-lo com a programa o script | Entrar-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
rperò sensexpermet 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
| Part | Valor | Significat |
|---|---|---|
| Tipus | - | - fitxer normal, d directori, l enllaç simbòlic |
| Propietari | rwx | oscar el pot llegir, modificar i executar |
| Grup | r-x | Els membres de desenvolupament el poden llegir i executar |
| Altres | r-- | 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--).
| Octal | Simbòlic | Descripció |
|---|---|---|
| 0 | --- | Cap permís |
| 1 | --x | Execució |
| 2 | -w- | Escriptura |
| 3 | -wx | Escriptura i execució |
| 4 | r-- | Lectura |
| 5 | r-x | Lectura i execució |
| 6 | rw- | Lectura i escriptura |
| 7 | rwx | Lectura, 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ímbol | Significat | Exemple |
|---|---|---|
u | Propietari | u+x |
g | Grup | g-w |
o | Altres | o=r |
a | Tots (u, g i o) | a+r |
+ | Afegeix permisos | g+w |
- | Treu permisos | o-rwx |
= | Fixa exactament els permisos indicats | u=rw |
r, w, x | Lectura, escriptura, execució | u+rwx |
X | Execució només per a directoris (i fitxers que ja siguin executables) | -R a+X |
s | SUID (amb u) o SGID (amb g) | u+s, g+s |
t | Bit 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:
| Bit | Valor octal | En un fitxer | En un directori | Es veu com a |
|---|---|---|---|---|
| SUID | 4000 | S’executa amb els permisos del propietari | (No té efecte a Linux) | s a la x del propietari |
| SGID | 2000 | S’executa amb els permisos del grup | Els fitxers nous hereten el grup del directori | s a la x del grup |
| Sticky | 1000 | (No té efecte a Linux) | Només el propietari d’un fitxer el pot esborrar o canviar-ne el nom | t 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
| Comanda | Per a què serveix |
|---|---|
chmod | Canviar els permisos |
chown | Canviar el propietari (i el grup) |
chgrp | Canviar el grup |
umask | Decidir els permisos per defecte dels fitxers nous |
ls -l, stat | Veure 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), i640o600si contenen contrasenyes (/etc/shadowés640, propietat derooti del grupshadow). - Scripts: necessiten el permís d’execució per llançar-los com a
./script.sh:chmod u+x script.sh(o755si 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
700i Ubuntu (des de la 21.04) amb750, de manera que els altres usuaris no hi poden entrar. - Claus SSH:
~/.sshamb700i la clau privada amb600; si no,sshno 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
755i fitxers644(o750/640si 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 fitxers444(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 permisos | ls -l fitxer o stat -c '%a %A' fitxer |
| Fer executable un script | chmod u+x script.sh |
| Que només jo pugui llegir un fitxer | chmod 600 fitxer |
| Directoris 755 i fitxers 644 de manera recursiva | chmod -R u=rwX,go=rX directori/ |
| Canviar el propietari | sudo chown joan:joan fitxer |
| Que els fitxers nous no siguin llegibles per als altres | umask 027 |
Articles relacionats
- Usuaris i grups a Linux.
chmod ugo+rwxichmod go-rwx.find / -perm -u+s: buscar fitxers amb SUID.chattrilsattr: atributs que van més enllà dels permisos.