Cosa sono le modalità chmod ottali e simboliche?

chmod imposta i permessi di un file su Linux, macOS e altri sistemi Unix e accetta due notazioni. Una modalità ottale, come 755, contiene una cifra per il proprietario, il gruppo e tutti gli altri utenti: la lettura vale 4, la scrittura 2 e l'esecuzione 1. Una modalità simbolica, come u=rwx,g=rx,o=rx, indica invece le classi (u proprietario, g gruppo, o altri, a tutti) e i permessi (r, w, x).

Le modalità simboliche possono anche modificare i permessi invece di impostarli tutti: u+x aggiunge l'esecuzione per il proprietario, go-w rimuove la scrittura per il gruppo e gli altri utenti, mentre g=u copia i permessi del proprietario nel gruppo. Una modalità ottale imposta sempre ogni permesso, quindi il risultato ottale di una modifica dipende dalla modalità precedente del file.

Descrizione dello strumento

Questo strumento converte le modalità chmod tra la notazione ottale e quella simbolica. Scegli la notazione di origine e quella di destinazione oppure lascia l'origine sul rilevamento automatico: inserisci 755 per ottenere u=rwx,g=rx,o=rx, oppure inserisci una modalità simbolica per ottenere il valore ottale. Per modifiche come u+x o a+X, inserisci la modalità attuale del file e visualizza la modalità che chmod applicherà. Puoi anche incollare una stringa di permessi proveniente da ls -l, come -rwxr-xr-x, oppure un comando chmod completo.

Esempi

Ottale Simbolica ls -l Uso tipico
644 u=rw,go=r -rw-r--r-- File normali
755 u=rwx,go=rx -rwxr-xr-x Script, programmi e directory
600 u=rw,go= -rw------- File privati, come le chiavi SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Directory condivise che mantengono il gruppo
1777 a=rwx,+t drwxrwxrwt /tmp e altre directory condivise temporanee
4755 u=rwxs,go=rx -rwsr-xr-x Programmi come passwd

Funzionalità

  • Converte i valori ottali in simbolici e quelli simbolici in ottali, con un pulsante per invertire la direzione
  • Rileva la notazione della modalità inserita oppure converte dalla notazione scelta
  • Applica modifiche relative come u+x, go-w, a=r,u+w, g=u e a+X a una modalità attuale
  • Gestisce setuid, setgid e lo sticky bit (s, t e le modalità ottali a 4 cifre)
  • Scrive la modalità simbolica in forma completa (u=rwx,g=rx,o=rx) o compatta (u=rwx,go=rx)
  • Legge e scrive le stringhe di permessi di ls -l, inclusi s, S, t e T
  • Accetta comandi incollati come sudo chmod -R 755 dir
  • Indica il carattere esatto quando una modalità non è valida

Come funziona

Una modalità ottale viene interpretata come composta da un massimo di quattro cifre: la prima, opzionale, contiene setuid (4), setgid (2) e sticky (1), mentre le altre tre contengono i permessi del proprietario, del gruppo e degli altri utenti. Una modalità simbolica viene interpretata clausola per clausola, seguendo la grammatica POSIX, e applicata alla modalità attuale nello stesso modo in cui lo fa GNU chmod su Linux:

  • + aggiunge i permessi, - li rimuove e = li imposta cancellando il resto per le classi indicate.
  • X aggiunge l'esecuzione solo alle directory e ai file che hanno già il permesso di esecuzione per almeno un utente.
  • s imposta setuid con u e setgid con g. t imposta lo sticky bit con o, a o senza specificare alcuna classe.
  • Senza una classe, come in +x, la modifica si applica a tutti, ad eccezione dei bit bloccati da umask.
  • Nelle directory, setuid e setgid restano invariati a meno che la modalità non li indichi, come in g-s.

L'output simbolico imposta esplicitamente ogni bit, quindi su un file produce lo stesso risultato indipendentemente dalla modalità precedente del file. Lo sticky bit viene scritto come clausola separata +t, perché sia GNU chmod sia BSD chmod lo accettano in questa forma.

Suggerimenti

  • Usa a+X con chmod -R per rendere le directory attraversabili senza rendere eseguibile ogni file.
  • chmod 755 su una directory non rimuove setgid con GNU chmod. Usa chmod 00755 o g-s per rimuoverlo.
  • Ansible e molti file di configurazione richiedono uno zero iniziale, come in 0755. Attiva «Mostra sempre 4 cifre ottali» per ottenerlo.
  • Un . o un + dopo una stringa di ls -l indica un contesto SELinux o un ACL. Usa getfacl per visualizzare le voci ACL, che la modalità non mostra.