Padroneggiare i permessi dei file Linux con il comando 'chmod'
Impara chmod con modalità simboliche e numeriche, impostazioni predefinite sicure, modifiche ricorsive e bit di permesso speciali.
Padroneggiare i permessi dei file Linux con il comando 'chmod'
I permessi dei file Linux decidono chi può leggere, modificare o eseguire un file. Quando uno script non viene eseguito, un server web non riesce a leggere un file o una chiave privata viene rifiutata perché troppo aperta, chmod è spesso parte della soluzione.
Il comando chmod modifica i bit di permesso. Puoi usare modalità simboliche leggibili come u+x o modalità numeriche compatte come 755.
Leggere le stringhe di permesso
Esegui ls -l per vedere il tipo e i permessi di un file:
ls -l deploy.sh
Esempio di output:
-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh
Il primo carattere è il tipo di file. Un file regolare inizia con -, una directory inizia con d e un collegamento simbolico inizia con l.
I successivi nove caratteri sono tre gruppi di permessi:
- Utente: il proprietario del file.
- Gruppo: i membri del gruppo del file.
- Altri: tutti gli altri.
Ogni gruppo può avere:
r: leggere il contenuto del file o elencare i nomi delle directory.w: modificare un file o creare/eliminare/rinominare voci in una directory.x: eseguire un file o attraversare una directory.
Il permesso di esecuzione delle directory è importante. Senza x su una directory, non puoi entrarvi né accedere ai file al suo interno per nome, anche se puoi elencare alcuni metadati altrove.
Usare le modalità simboliche per piccole modifiche
La sintassi simbolica si presenta così:
chmod [chi][operatore][permessi] percorso
chi può essere u per utente, g per gruppo, o per altri o a per tutti. Gli operatori sono + per aggiungere, - per rimuovere e = per impostare esattamente.
Rendi eseguibile uno script per il proprietario:
chmod u+x deploy.sh
Consenti al gruppo di modificare un file condiviso:
chmod g+w shared_document.txt
Rimuovi l'accesso in scrittura dal gruppo e dagli altri:
chmod go-w config.yml
Imposta gli altri in sola lettura, sostituendo eventuali permessi esistenti per gli altri:
chmod o=r project_plan.txt
Le modalità simboliche sono utili perché modificano solo i bit che nomini.
Usare le modalità numeriche per set completi di permessi
Le modalità numeriche impostano i permessi di utente, gruppo e altri in un unico comando. Ogni permesso ha un valore:
- Lettura:
4 - Scrittura:
2 - Esecuzione:
1
Somma i valori per ogni gruppo:
| Modalità | Significato |
|---|---|
7 |
rwx |
6 |
rw- |
5 |
r-x |
4 |
r-- |
0 |
--- |
Imposta un file di testo normale in lettura/scrittura per il proprietario e sola lettura per tutti gli altri:
chmod 644 important_file.txt
Imposta una directory normale in modo che il proprietario possa gestirla e gli altri possano entrarvi e leggerla:
chmod 755 public_assets
Blocca una chiave privata in modo che solo il proprietario possa leggerla e scriverla:
chmod 600 private_key.pem
Evita 777 a meno che tu non sia in un ambiente di test temporaneo e comprenda il rischio:
chmod 777 scratch
777 consente a qualsiasi utente locale di leggere, scrivere ed eseguire o attraversare il percorso. Su sistemi condivisi, questo è raramente accettabile.
Gestire file e directory in modo diverso
File e directory di solito necessitano di modalità diverse. I file spesso usano 644; le directory spesso usano 755. Se esegui questo comando alla cieca, rendi eseguibile ogni file:
chmod -R 755 web_root/
Per una directory web, un modello più sicuro è:
find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +
Poi aggiungi il permesso di esecuzione solo agli script che ne hanno effettivamente bisogno:
chmod 755 web_root/scripts/deploy.sh
Usare i bit di permesso speciali con cautela
Le modalità numeriche possono includere una quarta cifra iniziale per bit speciali:
| Valore | Nome | Effetto comune |
|---|---|---|
4 |
SetUID | Un eseguibile viene eseguito con l'ID utente effettivo del proprietario del file. |
2 |
SetGID | Un eseguibile viene eseguito con l'ID gruppo effettivo del gruppo del file; sulle directory, le nuove voci ereditano il gruppo della directory. |
1 |
Sticky bit | Sulle directory, gli utenti possono eliminare solo i file di loro proprietà, di proprietà del proprietario della directory o che root può eliminare. |
Imposta il bit SetGID su una directory di progetto condivisa in modo che i nuovi file ereditino il gruppo della directory:
chmod 2770 shared_group_files
Imposta lo sticky bit su una directory condivisa scrivibile:
chmod 1777 /srv/shared-upload
L'esempio classico è /tmp, che è scrivibile da tutti ma protetto dallo sticky bit.
Fai attenzione con SetUID e SetGID sugli eseguibili. Possono creare un serio rischio di escalation dei privilegi se il programma è scrivibile, mal progettato o accetta input non sicuri. Molti sistemi Unix-like ignorano anche SetUID sugli script per motivi di sicurezza.
Verificare il risultato
Dopo aver modificato i permessi, controllali:
ls -ld web_root web_root/index.html
Usa stat quando vuoi la modalità numerica:
stat -c '%a %n' web_root/index.html
Su macOS, il formato di stat è diverso:
stat -f '%Lp %N' web_root/index.html
Conclusione
Usa chmod simbolico quando vuoi aggiungere o rimuovere un permesso. Usa chmod numerico quando vuoi impostare esattamente la modalità completa. Tratta le modifiche ricorsive con cura, mantieni file e directory separati e verifica con ls -l o stat prima di proseguire.