Svelare il Mistero dei Permessi di Unix: Un Viaggio Facile nel Cuore della Sicurezza dei Dati

(spiegazione dettagliata di come funzionano le permission Unix)

Un post sui permessi di Unix ? Ce ne sono milioni da almeno 30 anni ma , forse per pigrizia, non li avevo mai capiti bene soprattutto quando si parla di numeri (755,750,777,etc.).

E quello che poi leggiamo (drwxr-xr-x, -rw-r–r–, etc.) sui nostri sistemi? Proprietà (ownership) di file e directory suddivisa fra proprietari e gruppi ma che significa veramente?

Non nego che tutto quello che ho trovato non è mai stata di immediata comprensione neanche per me che lavoro nel campo da decenni. Oggi ho trovato un modo per comprenderlo e quindi spiegarlo in modo veramente semplicissimo. Unix è famoso da sempre per la maniacale attenzione alla sicurezza dei dati.Quando parliamo di Unix, per i meno addetti ai lavori intendiamo tutti i sistemi che si basano su esso: Linux in tutte le sue distribuzioni ma anche Mac OSX, IOS, Android,etc. Il concetto si applica anche ai sistemi operativi Windows anche se quanto segue è focalizzato sui sistemi operativi Unix-like. 

Consideriamo il nostro file (di qualsiasi tipo esso sia) come un pacco,un regalo o quel che vogliamo che si trova in un appartamento all’interno di un condominio. Questo pacco noi possiamo guardarlo (leggere/read), usarlo (eseguirlo/execute) ma anche cambiarlo aggiungendo o togliendo contenuto o riscrivendolo (write).Il concetto di “pacco” indica il file ma può anche indicare l’appartamento (folder/directory) ove si trovano uno o più pacchi , non cambia nulla.

Vivendo in condominio e/o avendo conoscenze a sua volta quel pacco può interessare a vario titolo ad altri gruppi di persone (groups) quindi dobbiamo considerare anche le loro esigenze 🙂 Se il condominio è il filesystem Unix (/) l’appartamento è il folder (interno1) il nostro pacco sarà quindi nel filesystem indicato come “/interno1/pacco”. Questo file chiamato “pacco” ha quindi le sue regole che indicano ogni attore cosa ci può fare.

r=read,w=write,x=execute (lettura,scrittura,esecuzione)

Per ogni file avremmo quindi indicati i permessi che ha il proprietario (owner), il gruppo (groups) ed il resto del mondo (others) facciamo un’esempio: il comando ls -al riporta l’elenco completo dei file dentro una directory. Guardiamo in dettaglio un file:

-rwxr-x— 1 pietro pietro 7159 gen 8 17:11 test.txt

Il primo “-” indica che si tratta di un file singolo, nel caso di una directory il primo carattere sarà “d” subito dopo notiamo i permessi. Per ognuna delle tre entità (owner,group,others) vediamo cosa possono e non possono fare: il proprietario (owner) può leggere (r), scrivere(w), ed eseguire (x) il file, il gruppo potrà solo leggere ed eseguire il file (r-x) mentre il resto del mondo (others) non potrà fare assolutamente nulla con quel file, per gli “altri” , quindi quel file sarà invisibile.

Notate come il “-” indica “NO” al permesso corrispondente, mentre il nome del permesso stesso indica il “SI” quindi r-x indica: si lettura, no scrittura, si esecuzione.

Se per i meno pratici già così potrebbe non sembrare del tutto immediato al tutto si aggiunge un’ulteriore complicazione. Quando vorremmo cambiare i permessi di un file o directory useremo il comando “chmod” ma lo stesso spesso utilizza una notazione numerica. Vedremo quindi numeri come 700,600,777,etc. Che significano?

Sveliamo l’arcano: Il valore lettura ha un peso numerico pari a 4, Il valore scrittura pari a 2, Il valore esecuzione pari a 1.

le tre cifre dopo il chmod indicano le permission per tutti e 3 i tipi di utenze (owner,group,world) e si ricavano sommando i valori appena elencati in modo appropriato.

Nell’esempio del file di sopra quindi avremo: lettura+scrittura+esecuzione = 4+2+1 = 7 per il proprietario, lettura+esecuzione= 4+1 = 5 per il gruppo , nessun permesso = 0 per tutti gli altri. di conseguenza per il file di cui sopra la notazione numerica del permesso sarà 750.

  

Nell’esempio in figura sono rappresentate le permission complete che avrebbe il file “777” ed è riportato a titolo esemplificativo. Nello scenario di cui sopra se volessimo dare al file le permission precedentemente elencate basterebbe scrivere: sudo chmod 750 test.txt dalla directory ove si trova il file o : sudo chmod 750 /path/test.txt

Ed ecco l’ultimo particolare fondamentale: nell’ottica dell’esempio di cui sopra dei permessi distribuiti a proprietario,gruppi ed estranei (others) ogni singolo file eredità i permessi dell’intero percorso per raggiungerlo.

Questo concetto è un po come quello delle porte: malgrado noi possiamo decidere che il nostro pacco dentro la stanza abbia determinati permessi, è logica capire come per arrivare a lui il percorso che si deve seguire (path del file) deve permettere all’utente/gruppo/altri di poter accedere durante tutto il cammino.

Servirebbe infatti a poco la sicurezza del nostro pacco se non ci fossero regole ferree anche per il percorso e le porte da aprire per arrivare allo stesso.

Questo concetto è importantissimo perché a poco serve che il file /path/test.txt sia liberamente accessibile/modificabile/rimovibile da tutti o parte di loro se il percorso per arrivarci non ha permessi coerenti.

Il comando che usiamo per settare la “ownership” di un file è “chown” quindi:  sudo chown utente(proprietario):gruppo nomefile/directory. Quindi rifacendoci all’esempio: sudo chown pietro:pietro test.txt alla directory ove si trova il file o : sudo chown 750 /path/test.txt

N.B: per i comandi chmod/chown spesso si usa il parametro -r (in modo ricorsivo) per applicare la regola all’intero percorso (path).

Spero in modo divertente di aver spiegato uno dei concetti più ostici di Unix.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.