Come funzionano i permessi Unix
Ogni file ha tre gruppi di tre bit di permesso: per il proprietario del file, per il suo gruppo e per tutti gli altri. Ogni gruppo può consentire la lettura (r, valore 4), la scrittura (w, 2) e l’esecuzione (x, 1). Somma i valori di ogni gruppo e ottieni una cifra ottale, ed è per questo che i permessi si scrivono con tre cifre: rwxr-xr-x è 4+2+1, 4+1, 4+1 = 755.
Per le directory gli stessi bit significano cose leggermente diverse: la lettura elenca le voci, la scrittura crea ed elimina voci, e l’esecuzione permette di entrare nella directory e raggiungere i file al suo interno. Una directory senza x è inutilizzabile anche con r.
I bit speciali
Una quarta cifra iniziale contiene altri tre bit. setuid (4) fa girare un eseguibile come il suo proprietario, che è il modo in cui passwd può modificare un file di root. setgid (2) fa lo stesso per il gruppo, e su una directory fa ereditare ai nuovi file il gruppo della directory, che è ciò che vogliono le cartelle di progetto condivise. sticky (1) su una directory impedisce agli utenti di cancellare i file degli altri; /tmp è 1777.
Modalità simbolica
chmod accetta anche modifiche invece di valori assoluti: u+x aggiunge l’esecuzione per il proprietario, go-w toglie la scrittura a gruppo e altri, a=r imposta tutti in sola lettura. X (maiuscola) aggiunge l’esecuzione solo alle directory e ai file che già ce l’hanno da qualche parte, il che rende chmod -R a+rX il modo sicuro di aprire un albero in lettura.
umask
I nuovi file partono da 666 e le directory da 777, meno la umask. La umask comune 022 dà 644 e 755; 077 dà 600 e 700 (privato). umask senza argomenti mostra il valore corrente.
Valori comuni
| Ottale | Simbolico | Uso |
|---|---|---|
| 644 | rw-r--r-- | File ordinari, contenuti web |
| 755 | rwxr-xr-x | Eseguibili, script, directory |
| 600 | rw------- | Chiavi private, .env, file di password |
| 700 | rwx------ | ~/.ssh e altre directory private |
| 664 / 775 | rw-rw-r-- / rwxrwxr-x | File / directory condivisi nel gruppo |
| 2775 | rwxrwsr-x | Directory condivisa con ereditarietà del gruppo |
| 1777 | rwxrwxrwt | /tmp |
| 4755 | rwsr-xr-x | Programmi setuid come passwd, sudo |
Domande
Cosa significa chmod 755?
Il proprietario può leggere, scrivere ed eseguire; gruppo e altri possono leggere ed eseguire. È la modalità normale per programmi, script e directory.
Cosa fa chmod 777, e perché è sbagliato?
Permette a ogni utente del sistema di leggere, scrivere ed eseguire il file. Su una macchina condivisa o esposta a Internet significa che chiunque, compreso un servizio compromesso, può modificarlo. Non è quasi mai la soluzione giusta a un errore di permessi; di solito lo sono la proprietà (chown) o un 755/644.
Perché il mio script dice «permission denied»?
Gli manca il bit di esecuzione. Esegui chmod +x script.sh (o 755). Se si trova su un filesystem montato noexec, o la riga shebang punta a un interprete mancante, ricevi lo stesso messaggio.
Cosa significano la s o la t in ls -l?
Una s minuscola nella posizione di esecuzione del proprietario o del gruppo significa che setuid o setgid è impostato insieme all’esecuzione; una S maiuscola significa che il bit speciale è impostato senza esecuzione (di solito un errore). t e T sono lo stesso per il bit sticky. Incolla la stringa nella casella simbolica per decodificarla.
Che differenza c’è tra chmod e chown?
chmod cambia i bit di permesso; chown cambia quale utente e gruppo possiedono il file. Molti problemi di «permission denied» sono problemi di proprietà: i bit sono giusti ma per l’utente sbagliato.
Come imposto i permessi ricorsivamente?
chmod -R. Per evitare di rendere eseguibile ogni file, usa chmod -R u=rwX,go=rX dir, dove la X maiuscola applica l’esecuzione solo alle directory e ai file già eseguibili.