chmod
chmod (change mode) modifica i permessi di file e cartelle.
Come funzionano i permessi
Ogni file ha tre gruppi di permessi: proprietario (u), gruppo (g), altri (o).
| Permesso | Lettera | Valore | Su un file | Su una cartella |
|---|---|---|---|---|
| Lettura | r | 4 | Leggere il contenuto | Elencare i file |
| Scrittura | w | 2 | Modificare il file | Creare/eliminare file |
| Esecuzione | x | 1 | Eseguirlo | Entrare nella cartella |
Notazione numerica (ottale)
Si sommano i valori per ogni gruppo.
chmod 755 script.sh
chmod 644 file.txt
chmod 600 chiave_privata
chmod 700 cartella_privata
| Valore | Significato |
|---|---|
7 | rwx (4+2+1) |
6 | rw- (4+2) |
5 | r-x (4+1) |
4 | r-- |
0 | --- |
Esempi comuni:
| Modo | Uso tipico |
|---|---|
644 | File normali (proprietario scrive, tutti leggono) |
755 | Script e cartelle (tutti eseguono, solo il proprietario scrive) |
600 | File privati, come le chiavi SSH |
700 | Cartelle private, come ~/.ssh |
Notazione simbolica
Formato: chi operatore permessi.
- Chi:
uproprietario,ggruppo,oaltri,atutti - Operatore:
+aggiunge,-toglie,=imposta esattamente
chmod +x script.sh
chmod u+x script.sh
chmod go-w file.txt
chmod a+r file.txt
chmod u=rwx,g=rx,o= script.sh
Ricorsivo
chmod -R 755 cartella/
Attenzione: applica gli stessi permessi a file e cartelle. Per distinguerli:
find cartella/ -type d -exec chmod 755 {} +
find cartella/ -type f -exec chmod 644 {} +
In simbolica, la X maiuscola aggiunge l'esecuzione solo alle cartelle e ai file già eseguibili:
chmod -R u=rwX,go=rX cartella/
Permessi speciali
| Valore | Nome | Effetto |
|---|---|---|
4000 | SUID | Il file viene eseguito con i privilegi del proprietario |
2000 | SGID | Esecuzione con i privilegi del gruppo; su una cartella i nuovi file ereditano il gruppo |
1000 | Sticky bit | Su una cartella, solo il proprietario di un file può eliminarlo (es. /tmp) |
chmod 2775 cartella_condivisa
chmod +t cartella
Errori comuni
- Non usare mai
chmod 777: dà a chiunque il pieno controllo ed è quasi sempre una scorciatoia sbagliata. Operation not permitted: non sei il proprietario del file, usasudo.- SSH rifiuta una chiave se i permessi sono troppo aperti:
chmod 600 ~/.ssh/id_ed25519echmod 700 ~/.ssh.
Vedi anche: chown, ls -l.