>_ Sistemi operativi e Linux

Permessi su Linux: lettura, scrittura, esecuzione e chmod

Come funzionano i permessi dei file su Linux: proprietario, gruppo e altri, rwx, notazione ottale, chmod, chown, umask e i bit speciali setuid e sticky.

Su Linux ogni file e ogni cartella hanno un proprietario, un gruppo e un insieme di permessi che stabiliscono chi può fare cosa. È un modello semplice, nato con Unix, ma capirlo bene risolve metà dei problemi del tipo «permesso negato» e previene configurazioni pericolose come il famigerato chmod 777.

Leggere i permessi con ls -l

Il comando ls -l mostra una riga come questa:

-rw-r--r-- 1 anna ufficio 2048 mar 3 10:15 relazione.txt

Il primo carattere indica il tipo: - file normale, d cartella, l collegamento simbolico. Seguono nove caratteri divisi in tre gruppi da tre:

Posizione Si applica a Nell'esempio
2-4 proprietario (user) rw- lettura e scrittura
5-7 gruppo (group) r-- solo lettura
8-10 tutti gli altri (others) r-- solo lettura

Poi compaiono il proprietario (anna) e il gruppo (ufficio). Il sistema controlla le categorie in ordine: se sei il proprietario valgono i permessi del proprietario, anche se quelli del gruppo fossero più ampi.

Cosa significano r, w, x

Per i file il significato è intuitivo: r permette di leggere il contenuto, w di modificarlo, x di eseguirlo come programma o script.

Per le cartelle le cose sono meno ovvie:

  • r permette di elencare i nomi dei file contenuti;
  • w permette di creare, rinominare ed eliminare file al suo interno;
  • x permette di attraversare la cartella, cioè di entrarci e accedere ai file di cui si conosce il nome.

Una conseguenza importante: la possibilità di cancellare un file dipende dai permessi della cartella che lo contiene, non da quelli del file stesso. Un file in sola lettura può essere eliminato da chi ha permesso di scrittura sulla cartella.

La notazione ottale

Ogni permesso ha un valore: r = 4, w = 2, x = 1. Sommandoli si ottiene una cifra per ciascuna categoria.

  • 7 = 4+2+1 = rwx
  • 6 = 4+2 = rw-
  • 5 = 4+1 = r-x
  • 4 = r--
  • 0 = ---

Così 644 significa rw-r--r--, tipico dei documenti, e 755 significa rwxr-xr-x, tipico di cartelle e programmi. Per un file con dati riservati, come una chiave privata, si usa 600: solo il proprietario legge e scrive.

chmod: cambiare i permessi

chmod accetta sia la forma ottale sia quella simbolica.

chmod 640 contratto.pdf        # rw- r-- ---
chmod u+x backup.sh            # aggiunge l'esecuzione al proprietario
chmod go-w condiviso.txt       # toglie la scrittura a gruppo e altri
chmod -R g+rX progetto/        # lettura al gruppo, X solo dove serve

Nella forma simbolica u, g, o e a indicano proprietario, gruppo, altri e tutti; +, - e = aggiungono, tolgono o impostano. La X maiuscola è un dettaglio prezioso: assegna l'esecuzione solo alle cartelle e ai file che sono già eseguibili per qualcuno, evitando di rendere eseguibili tutti i documenti quando si lavora in modo ricorsivo.

chown e chgrp: cambiare proprietario e gruppo

chown utente file cambia il proprietario, chown utente:gruppo file cambia entrambi, chgrp gruppo file solo il gruppo. Cambiare il proprietario di un file richiede i privilegi di amministratore, quindi di solito si usa sudo. Con -R l'operazione diventa ricorsiva: comodo, ma da usare con attenzione su cartelle di sistema.

Perché chmod 777 è quasi sempre sbagliato

Quando un'applicazione web non riesce a scrivere in una cartella, la tentazione è dare 777: tutti possono leggere, scrivere ed eseguire. Il problema sparisce, ma qualunque utente o processo del sistema può ora modificare o sostituire quei file. La soluzione corretta è capire quale utente ha bisogno di scrivere, per esempio l'utente con cui gira il server web, e assegnare a lui la proprietà o il gruppo, lasciando permessi stretti come 750 o 770.

umask: i permessi di partenza

I nuovi file non nascono con permessi casuali. La umask indica quali permessi togliere ai valori di base, che sono 666 per i file e 777 per le cartelle. Con la umask comune 022, i file nascono 644 e le cartelle 755. Con 027, il gruppo perde la scrittura e gli altri perdono tutto, ottenendo 640 e 750. Il comando umask senza argomenti mostra il valore corrente.

I bit speciali

Oltre ai nove permessi esistono tre bit aggiuntivi:

  • setuid su un eseguibile fa sì che giri con i privilegi del proprietario del file. È il meccanismo che permette a passwd di aggiornare un file di sistema che l'utente non potrebbe toccare. Compare come s al posto della x del proprietario.
  • setgid su una cartella fa sì che i nuovi file ereditino il gruppo della cartella: ideale per le cartelle condivise di un team.
  • sticky bit su una cartella impedisce di cancellare file altrui anche a chi ha permesso di scrittura. È il motivo per cui /tmp è scrivibile da tutti senza che ognuno possa eliminare i file degli altri; compare come t alla fine.

Nella forma ottale si aggiungono come quarta cifra iniziale: chmod 2770 condivisa/ imposta setgid, chmod 1777 /tmp lo sticky bit.

In sintesi

  • Ogni file ha permessi rwx separati per proprietario, gruppo e altri.
  • Sulle cartelle x significa attraversare e w permette di creare e cancellare i file contenuti.
  • In ottale r=4, w=2, x=1: 644 per documenti, 755 per programmi, 600 per dati riservati.
  • Invece di 777, assegna proprietà o gruppo all'utente che deve davvero scrivere.
  • setgid e sticky bit risolvono in modo elegante le cartelle condivise.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche