Calcolatore Chmod
Calcolatore interattivo di permessi di file Linux/Unix.
chmod 000 filename
Permessi comuni
Come usare
- Spunta le caselle per definire i permessi di lettura, scrittura ed esecuzione per il Proprietario, il Gruppo e gli Altri.
- Oppure digita direttamente un valore numerico a 3 cifre (per es. 755).
- La notazione simbolica e il comando
chmodsi aggiornano in tempo reale. - Clicca su Copia il comando per copiare il comando chmod completo.
Riferimento dei permessi
| Numero | Permesso | Simbolo |
|---|---|---|
| 0 | Nessun permesso | --- |
| 1 | Solo esecuzione | --x |
| 2 | Solo scrittura | -w- |
| 3 | Scrittura + esecuzione | -wx |
| 4 | Solo lettura | r-- |
| 5 | Lettura + esecuzione | r-x |
| 6 | Lettura + scrittura | rw- |
| 7 | Lettura + scrittura + esecuzione | rwx |
Domande frequenti
Cosa significa chmod 755?
755 significa che il proprietario può leggere, scrivere ed eseguire (7), mentre il gruppo e gli altri possono leggere ed eseguire ma non scrivere (5). È il permesso più comune per cartelle e script.
Qual è la differenza tra 644 e 755?
644 (rw-r--r--) autorizza il proprietario a leggere/scrivere e tutti a leggere solo · tipico per i file. 755 (rwxr-xr-x) aggiunge il permesso di esecuzione · tipico per cartelle e script.
Funziona anche per le cartelle?
Sì. I permessi numerici funzionano allo stesso modo. Per le cartelle, «esecuzione» significa poter entrare nella cartella e accedere al suo contenuto.
Il modello dei permessi Unix in 9 bit
Ogni file e directory su un sistema di tipo Unix porta con sé una «modalità», un piccolo numero intero che registra chi può fare cosa. Il modello è essenzialmente invariato dalla Sixth Edition Unix (maggio 1975), con le prime voci di manuale di chmod comparse in Version 1 Unix (novembre 1971). Codifica nove bit di permesso disposti come tre terne di lettura / scrittura / esecuzione, una terna ciascuna per il proprietario del file, il suo gruppo e tutti gli altri:
Owner Group Others
r w x r w x r w x
4 2 1 4 2 1 4 2 1
Ogni gruppo di tre bit è esattamente una cifra ottale perché tre bit codificano 2³ = 8 valori distinti (0-7). I pesi 4, 2, 1 sono 2², 2¹, 2⁰. Sommare qualsiasi combinazione di lettura (4) + scrittura (2) + esecuzione (1) produce le otto cifre possibili per classe senza collisioni, ed è l'intera mappatura da ottale a simbolico. chmod 755 significa quindi rwx (4+2+1=7) per il proprietario, r-x (4+1=5) per il gruppo, e r-x per tutti gli altri.
La stringa di 10 caratteri che vedi in ls -l sono gli stessi dati più una colonna extra all'inizio per il tipo di file: - per un file regolare, d per una directory, l per un link simbolico, c per un dispositivo a caratteri, b per un dispositivo a blocchi, p per una pipe con nome, s per un socket. I restanti nove caratteri sono le terne di permessi.
Notazione simbolica: chmod u+x file
Le modalità ottali sovrascrivono tutti e nove i bit in una volta. Le modalità simboliche non sono distruttive, invertono solo i bit che nomini. La grammatica è chi + op + perm:
- chi:
uutente/proprietario,ggruppo,oaltri,atutti (= ugo). - op:
+aggiunge,-rimuove,=imposta esattamente (e azzera gli altri). - perm:
r,w,x, più le lettere specialiX(esegui solo se la destinazione è una directory o è già eseguibile in almeno una classe),s(setuid / setgid),t(sticky / cancellazione ristretta). Puoi anche copiare da un'altra classe conu,g,o: ad es.,g=uimposta i permessi del gruppo identici a quelli del proprietario.
Esempi utili:
chmod u+x script.sh: aggiunge l'esecuzione solo per il proprietario.chmod g-w shared.log: rimuove la scrittura per il gruppo.chmod a=rw note.txt: imposta tutti su lettura/scrittura, azzera l'esecuzione per tutti.chmod o= secret.key: azzera tutti i bit per gli «altri».chmod -R u+rwX,go+rX /var/www: concede ricorsivamente al proprietario l'accesso completo e agli altri la lettura; laXmaiuscola aggiunge l'esecuzione solo sulle directory o sui file che ce l'hanno già in qualche classe, evitando di rendere accidentalmente eseguibile ogni file di testo.
Le modalità numeriche sono esplicite e idempotenti (chmod 755 significa sempre gli stessi nove bit). Le modalità simboliche sono chirurgiche (chmod g+w inverte solo un bit). Gli script di produzione tendono a preferire la forma numerica per chiarezza nei log di audit; gli operatori che digitano alla shell tendono a preferire quella simbolica per modifiche incrementali.
Modalità comuni e a cosa servono
| Modalità | Simbolico | Uso tipico |
|---|---|---|
| 755 | rwxr-xr-x | Eseguibili pubblici e directory standard, /usr/bin/*, docroot web, alberi di lavoro Git |
| 644 | rw-r--r-- | File regolari standard, configurazioni, codice sorgente, documenti |
| 700 | rwx------ | Directory privata, ~/.ssh, documenti personali che nessun altro dovrebbe vedere |
| 600 | rw------- | File privato, ~/.ssh/id_rsa, ~/.gnupg/*, file di password |
| 444 | r--r--r-- | Di sola lettura per tutti, dati di riferimento fissi, indici del registro Cargo |
| 750 | rwxr-x--- | Proprietario completo, gruppo lettura/attraversamento, altri nulla, directory di servizio condivisa dal gruppo |
| 777 | rwxrwxrwx | Quasi sempre sbagliato. Vedi sotto. |
Perché chmod 777 è quasi sempre sbagliato
Impostare un file a 777 lo rende leggibile, scrivibile ed eseguibile da tutti. Qualsiasi utente sulla macchina (compresi gli account di servizio senza privilegi e qualsiasi processo che venga mai compromesso) può leggere il contenuto del file, modificarlo ed eseguirlo. Il consiglio standard dei tutorial «basta chmod 777 finché non funziona» è un antipattern di sicurezza che è stato responsabile di innumerevoli violazioni reali: file di configurazione scrivibili da tutti che vengono manomessi, directory web scrivibili da tutti che diventano vettori di defacement, file di log scrivibili da tutti che permettono la falsificazione dei log, directory eseguibili da tutti che permettono l'esecuzione di codice arbitrario.
Se un errore di permessi ti sta bloccando, la soluzione giusta è quasi sempre cambiare il proprietario del file (con chown) o il suo gruppo (con chgrp) così che l'utente che ha bisogno dell'accesso possieda o sia comproprietario effettivamente del file, non rimuovere i controlli di accesso per tutti.
Bit speciali: setuid, setgid, sticky
Una quarta cifra ottale anteposta alla modalità sblocca tre bit speciali, tutti reliquie del progetto Unix originale:
- 4xxx, setuid (set user ID). Quando è impostato su un eseguibile, il programma viene eseguito con i privilegi del proprietario anziché con quelli di chi lo invoca. L'esempio classico è
passwd: ogni utente può eseguirlo, ma solo perché è setuid-root può scrivere su/etc/shadow. Setuid è una grande superficie di sicurezza, il Linux moderno lo sostituisce sempre più con le capability dei file (bit di permesso più granulari tramitesetcap), e molte distro stanno progressivamente rimuovendo i bit setuid. - 2xxx, setgid (set group ID). Su un eseguibile, viene eseguito con il gruppo del file; su una directory, i file creati al suo interno ereditano il gruppo della directory anziché il gruppo primario del creatore, utile per le directory di progetto condivise.
- 1xxx) sticky bit. Su una directory, solo il proprietario del file (o root) può eliminare o rinominare i file al suo interno, indipendentemente dal permesso di scrittura sulla directory stessa. L'uso canonico è
/tmp: scrivibile da tutti così qualsiasi utente può creare file, ma lo sticky bit impedisce agli utenti di eliminare i file degli altri.
La visualizzazione di ls -l scambia il carattere di esecuzione con s, S, t o T quando questi bit sono impostati (le lettere maiuscole indicano che il bit è impostato ma il bit di esecuzione sottostante non lo è).
umask: l'inverso di chmod
chmod imposta i permessi sui file esistenti. umask determina i permessi predefiniti sui file che crei, agendo come una maschera sottrattiva. L'aritmetica: un nuovo file regolare sarebbe 666 (rw-rw-rw-), una nuova directory 777, meno qualunque cosa sia impostata nell'umask. Valori comuni:
- umask 022 (il valore predefinito sulla maggior parte delle distro Linux), toglie la scrittura a gruppo e altri. I nuovi file finiscono a 644, le nuove directory a 755.
- umask 002 (predefinito in alcuni ambienti di sviluppo condivisi), toglie la scrittura solo agli altri. Nuovi file a 664, directory a 775. Utile quando un team di sviluppo vuole leggere e modificare i file degli altri.
- umask 077 (comune su server privati e configurazioni attente alla sicurezza), toglie tutti i permessi a gruppo e altri. Nuovi file a 600, directory a 700.
Digitare umask senza argomenti mostra il valore corrente. Impostarlo nell'init della tua shell (~/.bashrc, ~/.zshrc) o in /etc/login.defs si applica all'intera sessione.
File contro directory, significati diversi di x
Gli stessi bit r/w/x hanno significati leggermente diversi sulle directory rispetto ai file:
- Lettura su una directory: elenca il suo contenuto. Senza lettura, puoi comunque accedere a un nome di file noto all'interno della directory se hai l'esecuzione, ma
lsnon funzionerà. - Scrittura su una directory: crea, elimina o rinomina le voci al suo interno. Nota: questo è indipendente dal permesso di scrittura sui file stessi. La scrittura sulla directory più lo sticky bit (1xxx) è ciò che consente le directory condivise multiutente controllate come
/tmp. - Esecuzione su una directory: attraversarla (
cdal suo interno, accedere alle voci con nome al suo interno). Una directory senza esecuzione è di fatto un vicolo cieco. Molti sottili problemi di «permission denied» derivano da questa distinzione: hai la lettura su una directory profonda ma non l'esecuzione su una delle sue genitrici, quindi non puoi raggiungerla.
chmod ricorsivo e il pattern find
chmod -R 755 /var/www applica la stessa modalità a ogni file e directory nell'albero, il che è quasi sempre sbagliato perché file e directory vogliono modalità diverse (ad es., 644 per i file, 755 per le directory). L'idioma corretto usa find:
find /var/www -type f -exec chmod 644 {} +
find /var/www -type d -exec chmod 755 {} +
Oppure, in modo equivalente, con il chmod di GNU e la sua X maiuscola: chmod -R u=rwX,go=rX /var/www concede l'esecuzione solo sulle directory e sui file che avevano già l'esecuzione da qualche parte, esattamente il risultato che di solito vuoi.
Link simbolici, ACL e come Linux estende il modello
Due perfezionamenti che vale la pena conoscere:
- I link simbolici hanno una propria modalità (sempre 777) ma viene ignorata.
chmodsegue il link e modifica la destinazione per impostazione predefinita. Usachmod -hsu BSD ochmod --no-dereferencesu GNU per operare sul link stesso, anche se raramente c'è un motivo per farlo. - Le ACL POSIX (
setfacl,getfacl) estendono il modello di base con voci per singolo utente e per singolo gruppo. Un file può concedere la scrittura a un utente specifico senza toccare i bit di modalità standard.ls -lmostra un+finale sui file con ACL. macOS, la maggior parte dei filesystem Linux e i BSD le supportano tutti; sono facoltative e molti amministratori di sistema preferiscono attenersi alla più semplice modalità classica. - Le ACL NTFS di Windows sono ancora più ricche, voci per singolo utente / per singolo gruppo con bit espliciti di consenti / nega ed ereditarietà ereditabile. Il modello
chmodnon si traduce direttamente. Cygwin e WSL lo emulano in modo imperfetto sopra NTFS.
Altre domande
Perché la mia chiave SSH viene rifiutata con «permissions are too open»?
Perché il client OpenSSH si rifiuta di usare una chiave privata leggibile dal gruppo o da tutti, partendo dal presupposto che qualsiasi cosa altre persone possano leggere non dovrebbe essere una credenziale. La soluzione è chmod 600 ~/.ssh/id_rsa (e chmod 700 ~/.ssh sulla directory stessa). Stessa logica per ~/.gnupg/ e la maggior parte degli altri archivi di credenziali.
Qual è la differenza tra chmod e chown?
chmod cambia i bit di modalità, ciò che proprietario/gruppo/altri possono fare. chown cambia chi è il proprietario. Spesso servono entrambi: un file che «l'utente sbagliato non riesce a leggere» di solito non ha bisogno che i suoi permessi vengano aperti; ha bisogno di essere posseduto dall'utente che necessita dell'accesso. Prova prima chown myuser:mygroup file.
Dovrei usare 666 per i file di log?
Quasi mai. I file di log scrivibili da tutti permettono a qualsiasi processo (compreso un servizio compromesso in esecuzione come utente a basso privilegio) di falsificare voci di log o cancellare il log. Lo schema standard è rendere la directory di log scrivibile da un gruppo di log specifico (adm su Debian, wheel su BSD, ecc.) e aggiungere i servizi pertinenti a quel gruppo, oppure usare logrotate + un demone di logging (rsyslog, systemd-journald) che gestisce la proprietà dei file al posto tuo.
Questo calcolatore tiene conto dei bit speciali?
No, copre i nove bit di permesso di base (la modalità standard a 3 cifre). Per setuid (4xxx), setgid (2xxx) o sticky (1xxx) anteporresti manualmente la cifra iniziale. La stragrande maggioranza del lavoro quotidiano con chmod usa modalità a 3 cifre e non tocca mai i bit speciali.
Viene inviato qualcosa a un server?
No. La conversione interruttore ↔ ottale ↔ simbolico è pura aritmetica, calcolata nel tuo browser. La pagina funziona offline una volta caricata.