La comanda chmod (change mode) canvia els permisos d’un fitxer o d’un directori: qui el pot llegir, qui hi pot escriure i qui el pot executar. És la comanda que fas servir per fer executable un script, per protegir un fitxer amb contrasenyes o per arreglar els permisos d’una web. Només el propietari del fitxer (o root) en pot canviar els permisos.
Sintaxi
chmod [opcions] permisos fitxer...
Els permisos es poden escriure de dues maneres:
- Simbòlica:
u+x,go-w,u=rw,g=r,o=… Serveix per afegir o treure permisos concrets sense tocar la resta. - Numèrica (octal):
644,755,600… Fixa tots els permisos de cop.
Recordatori: com es llegeixen els permisos
$ ls -l script.sh
-rwxr-x--- 1 oscar oscar 10 Oct 3 23:53 script.sh
Després del primer caràcter (el tipus: - fitxer, d directori) venen tres grups de tres lletres: propietari (rwx), grup (r-x) i altres (---). Cada grup diu si hi ha permís de lectura (r), escriptura (w) i execució (x); un guió vol dir que no.
| Permís | En un fitxer | En un directori |
|---|---|---|
r | Llegir-ne el contingut | Veure la llista de noms que conté |
w | Modificar-lo | Crear, esborrar i canviar el nom dels fitxers que conté |
x | Executar-lo com a programa | Entrar-hi (cd) i accedir als fitxers que conté |
Tens tots els detalls a la guia de permisos de fitxers.
Mode simbòlic
Es combina qui, què fem i quin permís:
| Qui | Operació | Permís | |||
|---|---|---|---|---|---|
u | propietari (user) | + | afegeix | r | lectura |
g | grup | - | treu | w | escriptura |
o | altres (others) | = | fixa exactament | x | execució |
a | tots (u, g i o) | X | execució només a directoris (i a fitxers que ja en tinguin) |
Exemples:
chmod u+x script.sh # el propietari el pot executar
chmod g+w informe.txt # el grup hi pot escriure
chmod o-r informe.txt # els altres ja no el poden llegir
chmod go-rwx privat/ # ni el grup ni els altres hi tenen cap accés
chmod u=rw,g=r,o= notes.txt # fixa: rw- r-- ---
chmod a+r llegeix-me.md # tothom el pot llegir
Si no indiques qui (chmod +x script.sh), s’aplica a tots, però respectant la umask: amb la umask habitual és el mateix que a+x.
Mode numèric (octal)
Cada permís té un valor: r = 4, w = 2, x = 1. Se sumen per a cada grup i s’escriuen tres xifres: propietari, grup i altres.
| Xifra | Permisos | Xifra | Permisos | |
|---|---|---|---|---|
| 0 | --- | 4 | r-- | |
| 1 | --x | 5 | r-x | |
| 2 | -w- | 6 | rw- | |
| 3 | -wx | 7 | rwx |
Els valors més habituals:
| Valor | Permisos | Ús típic |
|---|---|---|
644 | rw-r--r-- | Fitxers normals: tu hi escrius, els altres el llegeixen |
600 | rw------- | Fitxers privats: claus SSH, fitxers amb contrasenyes |
640 | rw-r----- | Configuracions que ha de llegir un grup (per exemple, el del servidor web) |
755 | rwxr-xr-x | Directoris i programes o scripts que tothom pot executar |
750 | rwxr-x--- | Directoris i scripts només per a tu i el teu grup |
700 | rwx------ | Directoris privats (com ~/.ssh) |
Hi pot haver una quarta xifra al davant per als permisos especials (SUID = 4, SGID = 2, sticky = 1): chmod 2775 compartit/. Ho trobaràs explicat a els permisos especials.
Opcions més útils
| Opció | Què fa |
|---|---|
-R | Recursiu: aplica el canvi al directori i a tot el que conté |
-v | Mostra cada fitxer tractat |
-c | Com -v, però només mostra els fitxers que canvien de veritat |
--reference=fitxer | Copia els permisos d’un altre fitxer |
-f | No mostra la majoria de missatges d’error |
$ chmod -v 640 informe.txt
mode of 'informe.txt' changed from 0664 (rw-rw-r--) to 0640 (rw-r-----)
Per veure els permisos en número, fes servir stat:
$ stat -c '%a %A %n' informe.txt script.sh
640 -rw-r----- informe.txt
750 -rwxr-x--- script.sh
Canvis recursius: compte amb chmod -R 755
chmod -R 755 web/ fa executables tots els fitxers, cosa que no té sentit per a un .html o un .css i és una mala pràctica de seguretat. Per posar 755 als directoris i 644 als fitxers tens dues opcions:
Amb la X majúscula, que només dona execució als directoris (i als fitxers que ja eren executables):
chmod -R u=rwX,go=rX web/
$ ls -lR web
web:
drwxr-xr-x 2 oscar oscar 60 Oct 3 23:53 css
-rw-r--r-- 1 oscar oscar 0 Oct 3 23:53 index.html
web/css:
-rw-r--r-- 1 oscar oscar 0 Oct 3 23:53 estil.css
O amb find, separant directoris i fitxers:
find web/ -type d -exec chmod 755 {} +
find web/ -type f -exec chmod 644 {} +
Compte amb…
chmod 777gairebé mai és la solució. Si un programa no pot escriure en un directori, el més probable és que en calgui canviar el propietari (ambchown) o el grup, no obrir-lo a tothom.- Treure’t permisos a tu mateix. Amb
chmod 000 fitxerni tu el podràs llegir (Permission denied), tot i que com a propietari sempre en pots tornar a canviar els permisos. - El permís per esborrar és del directori. Un fitxer amb permisos
444(només lectura) es pot esborrar igualment si tens permís d’escriptura al directori que el conté. - Els enllaços simbòlics sempre es mostren com a
rwxrwxrwx;chmodcanvia els permisos del fitxer al qual apunten. - SSH és exigent: si
~/.ssho la clau privada tenen permisos massa oberts,sshes nega a fer-los servir. Feschmod 700 ~/.sshichmod 600 ~/.ssh/id_ed25519.
Comandes relacionades
- Guia de permisos de fitxers.
chmod ugo+rwxichmod go-rwx: dos exemples comentats.chown: canviar el propietari i el grup.chgrp: canviar el grup.umask: permisos per defecte dels fitxers nous.chmod u+s: el bit SUID.ls -lh: veure els permisos d’un fitxer.findper canviar permisos de manera recursiva.