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.
| Classe | Lettura | Scrittura | Esecuzione |
|---|---|---|---|
| Proprietario | |||
| Gruppo | |||
| Altri |
chmod 644 filechmod u=rw,g=r,o=r file-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.
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.