Calcolatore chmod

Converte i permessi dei file Unix tra ottale (755), simbolico (rwxr-xr-x) e una griglia di caselle, con setuid, setgid e il bit sticky.

Modi comuni
ClasseLetturaScritturaEsecuzione
Proprietario
Gruppo
Altri
Ottale
Simbolico
Comando ottale
chmod 644 file
Comando simbolico
chmod u=rw,g=r,o=r file
Stile ls -l
-rw-r--r--

Cosa fa questo strumento

Ogni file di un sistema Unix porta con sé un insieme di permessi che decidono chi può leggerlo, modificarlo o eseguirlo. Il comando chmod li imposta e accetta quei permessi in due grafie piuttosto diverse — un numero ottale di tre cifre e una stringa di lettere — che descrivono esattamente la stessa cosa. Questo strumento tiene sincronizzate entrambe le grafie, e in più una griglia di caselle, così puoi partire da quella che hai e copiare quella che ti serve.

Tutto gira nel tuo browser ed è pura aritmetica: non c’è alcun server e nulla di ciò che digiti viene inviato altrove. È una calcolatrice e un riferimento, non un modo per cambiare i permessi su una macchina reale: per questo copi il comando chmod che produce e lo esegui tu.

Tre gruppi, tre permessi

I permessi sono organizzati in tre gruppi di tre. I gruppi sono il proprietario del file, il gruppo a cui appartiene e tutti gli altri: «altri». All’interno di ciascun gruppo ci sono tre permessi: lettura, scrittura ed esecuzione.

  • Lettura (r) — vedere il contenuto del file, o elencare le voci di una directory.
  • Scrittura (w) — modificare il file, o aggiungere e rimuovere voci in una directory.
  • Esecuzione (x) — eseguire il file come programma, o entrare in una directory e raggiungere i file al suo interno.

L’esecuzione significa qualcosa di diverso per una directory rispetto a un file, e questo spiazza: una directory che puoi leggere ma non eseguire ti mostra i nomi di ciò che contiene, ma non ti lascia aprire nulla.

Come funziona il numero ottale

I tre permessi di ciascun gruppo si comprimono in una cifra ottale sommando valori fissi: lettura vale 4, scrittura 2 ed esecuzione 1. Lettura-scrittura-esecuzione fa 4+2+1 = 7; lettura-esecuzione fa 4+1 = 5; lettura-scrittura fa 4+2 = 6. Tre gruppi danno tre cifre.

755
7 = 4+2+1   # proprietario: lettura + scrittura + esecuzione
5 = 4+0+1   # gruppo: lettura + esecuzione
5 = 4+0+1   # altri: lettura + esecuzione

Così 755 significa «il proprietario può fare tutto, gli altri possono leggere ed eseguire ma non modificare», il modo abituale per un programma o una directory. 644 — lettura e scrittura per il proprietario, sola lettura per gli altri — è il modo abituale per un file ordinario. Una volta che lo schema è familiare, i modi comuni si leggono a colpo d’occhio.

La stringa simbolica

L’altra grafia è quella che stampa ls -l: nove caratteri, tre per gruppo, ciascuno la sua lettera oppure un trattino. 755 è rwxr-xr-x; 644 è rw-r--r--. Contiene esattamente la stessa informazione del numero ottale, solo disposta in modo da vedere ogni permesso invece di sommare cifre a mente.

Una riga di ls -l ha un decimo carattere all’inizio: una d per una directory, un trattino per un file ordinario, una l per un collegamento simbolico. Quel carattere iniziale è il tipo del file, non un permesso, e chmod non può cambiarlo. Puoi incollare qui l’intero campo dei permessi di ls -l: il carattere di tipo viene semplicemente ignorato.

I bit speciali: setuid, setgid e sticky

Sopra i nove bit ordinari ce ne sono tre speciali, scritti come una quarta cifra ottale facoltativa in testa: setuid (4), setgid (2) e il bit sticky (1). Non hanno una colonna propria; ciascuno si sovrappone a una casella di esecuzione della stringa simbolica, ed è da lì che arrivano le maiuscole che lasciano perplessi.

  • setuid su un eseguibile lo fa girare come proprietario del file anziché come l’utente che l’ha lanciato. È così che passwd può aggiornare un file di sistema su cui non puoi scrivere direttamente, ed è il motivo per cui un programma setuid con un bug è una falla seria.
  • setgid su un eseguibile lo avvia con il gruppo del file. Su una directory fa qualcosa di più utile e sicuro: i nuovi file creati all’interno ereditano quel gruppo invece di quello di chi li crea.
  • Il bit sticky su una directory significa che solo il proprietario di un file può cancellarlo o rinominarlo, anche quando tutti possono scrivere nella directory. È ciò che mantiene /tmp condivisa ma sicura. Su un file ordinario non fa nulla.

Nella stringa simbolica un bit speciale attivo trasforma la sua casella di esecuzione in una lettera: s nella casella del proprietario per setuid, s in quella del gruppo per setgid, t in quella degli altri per sticky. Il maiuscolo o minuscolo dice se anche l’esecuzione è attiva: minuscolo sì, maiuscolo no.

rwsr-xr-x  4755   # setuid, e il proprietario esegue
rwSr-xr-x  4655   # setuid, ma il proprietario NON esegue
rwxrwxrwt  1777   # sticky, e gli altri eseguono
rwxrwxrwT  1776   # sticky, ma gli altri NON eseguono

Una S o una T maiuscola è quasi sempre un errore: significa che un bit speciale è stato messo su un file che non è eseguibile, quindi il bit non ha nulla su cui agire.

Ottale o simbolico da riga di comando

chmod accetta entrambe le forme e questo strumento le scrive entrambe. La forma ottale imposta tutti i bit in una volta: chmod 755 file. La forma simbolica con = fa lo stesso in modo assoluto — chmod u=rwx,g=rx,o=rx file — elencando ogni gruppo perché il risultato non dipenda da com’era il file prima.

Esiste una terza forma, relativa, di cui la calcolatrice non ha bisogno ma che incontrerai: chmod +x file aggiunge l’esecuzione per tutti, chmod g-w file toglie la scrittura al gruppo, chmod o= file azzera tutto per gli altri. Quella forma modifica i bit rispetto al modo corrente invece di impostarlo per intero: comodo da riga di comando, ma senza un unico «risultato» da mostrare.

Modi che è meglio non impostare

Uno strumento sui permessi dovrebbe anche dire quando un modo è una cattiva idea. Due ricorrono di continuo:

  • 777 dà a ogni utente lettura, scrittura ed esecuzione. È la correzione istintiva quando qualcosa «non funziona» e quasi sempre scambia un piccolo problema con un vero buco di sicurezza. Il modo giusto è quasi sempre più stretto: di solito 755 o 644.
  • Qualsiasi file scrivibile da tutti (l’ultima cifra che include 2) permette a qualunque account della macchina di riscriverne il contenuto. Per qualcosa che viene eseguito, incluso o considerato affidabile, quella è una via d’ingresso. Concedi la scrittura a un gruppo, oppure tienila al solo proprietario.

Lo strumento li segnala quando compaiono. Non può sapere se il tuo obiettivo è un file o una directory, perciò li presenta come cose che meritano una seconda occhiata e non come errori: il bit sticky è giusto su una directory e inutile su un file, e solo tu sai quale hai.

Cosa significa chmod 755

È il modo a cui arriva quasi ogni script, programma e directory, e si legge un gruppo alla volta. Ogni cifra è la somma dei tre permessi di quel gruppo — lettura 4, scrittura 2, esecuzione 1 — perciò 7 è tutti e tre e 5 è lettura più esecuzione senza la scrittura.

  • Proprietario — 7 = 4+2+1. Lettura, scrittura ed esecuzione: puoi modificare il file ed eseguirlo.
  • Gruppo — 5 = 4+0+1. Lettura ed esecuzione, senza scrittura: i membri del gruppo del file possono leggerlo ed eseguirlo, e non possono modificarlo.
  • Altri — 5 = 4+0+1. Di nuovo la stessa cosa: ogni altro account della macchina può leggerlo ed eseguirlo, e nessuno può modificarlo.

Scritto per intero è rwxr-xr-x, e il comando è chmod 755 file — oppure chmod u=rwx,g=rx,o=rx file se preferisci le lettere. Su una directory gli stessi bit si leggono in altro modo, perché lì l’esecuzione significa che puoi entrare e raggiungere quello che c’è dentro: 755 è una directory che chiunque può elencare e attraversare, mentre solo il proprietario può aggiungere o togliere voci. Su 755 la calcolatrice non dice niente, e di proposito: è il modo più stretto che lascia ancora ad altri account eseguire quello che hai scritto. Se anche il gruppo deve modificare il file, il modo che aggiunge la scrittura di gruppo è 775, non 777.

Cosa significa chmod 644, e perché i tuoi file lo hanno già

644 è 755 senza alcun bit di esecuzione: 6 = 4+2 per il proprietario, poi 4 = 4+0+0 per il gruppo e di nuovo 4 per altri, cioè rw-r--r--. Nessuno può eseguirlo, ed è esattamente quello che serve a tutto ciò che viene solo letto: un documento, una pagina HTML, un file di configurazione, un file sorgente che un altro programma compila. Su una directory, invece, non è restrittivo ma rotto: senza esecuzione niente può entrare, quindi i nomi all’interno si elencano e nessuno di essi si apre.

È anche il modo che un file nuovo ha di solito prima che qualcuno lo tocchi, e la ragione si chiama umask. Un programma che crea un file chiede normalmente 666 e uno che crea una directory chiede 777; poi la umask cancella i bit che nomina, ancora prima che il file esista. Con la umask consueta 022 — scrittura tolta al gruppo e ad altri — 666 diventa 644 e 777 diventa 755, ed è per questo che quei due sono ovunque e per questo sono i primi due modi che questo strumento propone. Digita umask in una shell per vedere il valore che hai.

  • umask 022, il valore predefinito consueto: un file nuovo esce 644 e una directory nuova 755.
  • umask 002, impostata dove ogni utente ha un gruppo proprio: 664 e 775, così anche i membri del gruppo possono modificare.
  • umask 077, l’impostazione privata: 600 e 700, che nessuno oltre al proprietario può nemmeno leggere.

Tutti e sei sono modi già pronti qui, e non è un caso: sono le tre umask che le persone impostano davvero, applicate una volta a un file e una volta a una directory. Leggerli come tre coppie e non come sei valori è la via più rapida per smettere di andare a cercare i modi.

Cosa significa chmod 711: entrare, ma non guardare

711 è il modo comune che concede l’esecuzione senza la lettura: 7 = 4+2+1 per il proprietario, poi 1 = 0+0+1 due volte, cioè rwx--x--x. Acquista senso solo quando si separano di nuovo i due permessi di directory — la lettura elenca i nomi, l’esecuzione lascia passare — perciò una directory a 711 può essere attraversata da chiunque conosca già il nome di ciò che cerca, ed elencata da nessuno.

  • Su una directory questo è davvero utile. Una directory personale a 711 permette a un server web, o a un altro account di una macchina condivisa, di aprire /home/you/public/report.pdf mentre ls /home/you viene rifiutato. Niente è nascosto al proprietario; semplicemente i nomi non si possono enumerare dall’esterno.
  • Su un file è quasi inutile. Eseguire uno script di shell significa che un interprete apre il file e lo legge, quindi l’esecuzione senza lettura fallisce; funziona ancora solo un binario compilato, che il kernel carica da sé. Se intendevi uno script che altri potessero eseguire, volevi 755.

Nemmeno su 711 la calcolatrice dice qualcosa, perché è più stretto di 755 e non più largo: non concede niente che 755 non conceda. I suoi vicini compaiono per la stessa ragione — 751 dà al gruppo l’elenco negato ad altri, e 700 toglie anche il passaggio, che è ciò che serve a una directory destinata a un solo account.

777 e 1777: un bit di differenza e non lo stesso consiglio

I due modi che una directory condivisa tende ad attirare differiscono per un solo bit, e questo strumento risponde loro in modo diverso di proposito. 777 è rwxrwxrwx e torna segnalato come pericolo; 1777 è rwxrwxrwt, torna come una nota semplice ed è uno dei modi già pronti qui sopra: è il modo che /tmp ha davvero.

  • 777 — ogni cifra è 4+2+1: lettura, scrittura ed esecuzione per il proprietario, il gruppo e tutti gli altri. Non resta niente a proteggere niente: qualsiasi account può riscrivere il file, e qualsiasi account può cancellare o sostituire una voce in una directory che lo porta. È la correzione istintiva davanti a un problema di permessi, e quasi sempre scambia un problema piccolo con uno reale.
  • 1777 — gli stessi nove bit più il bit sticky, che permette di cancellare e rinominare una voce solo al proprietario di quella voce. Quell’unica restrizione è ciò che rende sicuro lasciare una directory scrivibile da tutti, ed è il motivo per cui /tmp funziona: chiunque può creare un file lì e nessuno può togliere quello di un altro.

La distinzione tiene solo dove anche altri ha l’esecuzione, e lo strumento è severo su questo. 1666 è rw-rw-rwT — il bit sticky posto dove nessun gruppo ha l’esecuzione — e niente di quella forma può essere una directory utilizzabile, quindi il bit sticky non custodisce nulla e il modo viene segnalato come scrivibile da tutti con la gravità piena, esattamente come 666. La T maiuscola dice la stessa cosa in un carattere.

Quindi: una directory che deve essere condivisa vuole 1777, o meglio ancora 775 con il gruppo giusto; e un file che non si apre è quasi sempre un problema di proprietà e non un caso per 777.

Domande frequenti

Qual è la differenza tra 644 e 755?
644 è lettura e scrittura per il proprietario e sola lettura per tutti gli altri, il modo abituale di un file ordinario. 755 aggiunge l’esecuzione per tutti e tre i gruppi, che è ciò che serve a un programma per girare e a una directory per essere attraversata. Usa 644 per documenti e file sorgente, 755 per script e directory.
Perché il mio modo mostrava una S o una T maiuscola?
Perché un bit speciale è stato messo su un gruppo che non ha il permesso di esecuzione. Una s o t minuscola significa che il bit speciale e l’esecuzione sono entrambi attivi; la forma maiuscola significa che il bit speciale è attivo ma l’esecuzione no, il che di solito indica che il modo non è quello voluto: per esempio 4644 (rwSr--r--) è setuid su un file che nessuno può eseguire.
Cosa fa davvero chmod 777 e perché è sconsigliato?
Concede lettura, scrittura ed esecuzione al proprietario, al gruppo e a tutti gli altri: accesso completo per ogni account del sistema. È sconsigliato perché rimuove ogni protezione in un colpo solo; un file su cui tutti possono scrivere è un file che chiunque può manomettere, e una directory su cui tutti possono scrivere è una in cui chiunque può depositare file. Quasi ogni caso che ricorre a 777 si risolve con 755 o 644 e la proprietà giusta.
La cifra iniziale deve esserci?
No. Quando nessun bit speciale è attivo, il modo è di sole tre cifre — 755, non 0755 — ed è ciò che questo strumento mostra. Uno zero iniziale è accettato e significa lo stesso; un 4, un 2 o un 1 iniziale attiva rispettivamente setuid, setgid o il bit sticky.
Posso incollare una riga presa direttamente da ls -l?
Sì. Incolla il campo dei permessi di dieci caratteri, come -rwxr-xr-x o drwxr-xr-x, e lo strumento toglie il carattere di tipo iniziale e legge il resto. Il tipo (file, directory, collegamento) non è un permesso e chmod non può cambiarlo, perciò viene ignorato.
Qualcosa di ciò che inserisco viene inviato a un server?
No. L’intero strumento è aritmetica che gira nel tuo browser. Nulla viene caricato, registrato o memorizzato, ed è anche il motivo per cui funziona senza alcuna connessione di rete.
Che cosa fa chmod 711?
Dà tutto al proprietario e dà al gruppo e a tutti gli altri la sola esecuzione — rwx--x--x. Su una directory significa che possono attraversarla fino a un percorso che già conoscono ma non possono elencare quello che contiene, che è ciò che una directory personale su una macchina condivisa vuole di solito. Su un file non è utile: uno script di shell deve essere letto dal suo interprete per partire, quindi l’esecuzione senza lettura semplicemente fallisce.
Qual è la differenza tra chmod 777 e chmod 1777?
Un bit — il bit sticky, scritto come l’1 iniziale, che cambia l’ultimo carattere da x a t. Entrambi danno a ogni account lettura, scrittura ed esecuzione; 1777 in più permette di cancellare o rinominare una voce solo al suo proprietario. Per questo lo strumento segnala 777 come quasi mai corretto mentre chiama 1777 il modo standard di una directory condivisa come /tmp.
Perché i file nuovi escono 644 e le directory nuove 755?
Per la umask. Un programma che crea un file chiede 666 e uno che crea una directory chiede 777, e la umask cancella dei bit da quello ancora prima che il file esista. Il valore consueto, 022, toglie la scrittura al gruppo e ad altri, e restano 644 e 755. Esegui umask in una shell per vedere il tuo: 002 dà 664 e 775, e 077 dà 600 e 700.
Che cosa significa rwxr-xr-x?
È 755 scritto per intero. Leggilo tre caratteri alla volta: rwx è il proprietario, con lettura, scrittura ed esecuzione; r-x è il gruppo, con lettura ed esecuzione ma senza scrittura; r-x di nuovo sono tutti gli altri. Un trattino significa che quel permesso è spento. Incolla la stringa nel campo «Simbolico» qui e la casella «Ottale» mostrerà 755.

Strumenti correlati