Permessi sui file

permessi-file-directory-linux-750x530

Per molti nuovi utenti il terminale risulta molto ostico e per molti altri i permessi sui file segni incomprensibili, vediamo di fare un po di chiarezza.

Partiamo quindi dall'inizio. Linux è un sistema multiutente e gli utenti sono a loro volta membri di uno o più gruppi. La maggior parte dei gruppi sono di sistema altri invece sono dei semplici raggruppamenti di utenti.

Utente

Vediamo prima di tutto a quale gruppi appartiene il nostro utente, da terminale lanciamo il comando:

id

il sistema ci risponderà con qualcosa di molto simile a questo:

id=1001(fabrizio) gid=1004(hptteam) groups=1004(hptteam),1001(fabrizio)

Da qui capiamo che:

  • l'utente è fabrizio (user id 1001)
  • il gruppo principale è hptteam (group id 1004)
  • che l'utente è nel gruppo hptteam (group id 1004) e nel gruppo fabrizio (id 1001)

File

Creiamo adesso un file vuoto:

touch tutorial.txt

Abbiamo creato un semplce file vuoto senza tipo alcuno (linux non usa l'estensione per identificare i file), per pura curiosità possiamo vedere di che tipo è il file con il comando:

file tutorial.txt

che restituisce:

tutorial.txt: empty

Appena ci scriviamo qualcosa con un qualsiasi editor di testo l'output diventa:

tutorial.txt: ASCII text

Permessi sui file

Il file che abbiamo creato ha utente fabrizio (l'ha creato l'utente fabrizio) e gruppo hptteam (il gruppo principale di fabrizio è hptteam), vediamo quindi l'output di:

ls -l tutorial.txt
-rw-r--r-- 1 fabrizio hptteam 0 Nov 18 15:19 tutorial.txt 

Dividiamo in piccoli gruppi l'output, i primi dieci caratteri riportano il tipo file e i permessi.

Il primo carattere identifica il tipo di file, i più comuni sono tre:

  • - file regolare
  • d directory (in Windows è chiamata cartella)
  • l link simbolico (quello Windows chiama Collegamento)

Ci sono altri tipi di file ma al momento non ci interessano (essendo tutti tipi di sistema). I caratteri da 2 a 4 (nel nostro esempio rw-) identificano i permessi per l'utente proprietario (fabrizio), il primo carattere della terzina può contenere:

  • r permesso di lettura
  • - no permesso di lettura

il secondo:

  • w permesso di scrittura
  • - no permesso di scrittura

il terzo:

  • x permesso di esecuzione (una cartella senza permesso di esecuzione non è apribile)
  • - no permesso di esecuzione

I caratteri da 5 a 7 (nel nostro caso r--) identificano i permessi per il gruppo proprietario (hptteam) e la terzina segue le stesse regole dei permessi per l'utente, mentre i caratteri da 8 a 10 (nel nostro caso sempre r--) identificano i permessi per gli altri utenti (non facenti parte del gruppo proprietario) e seguono le stesse regole di cui sopra.

Nell'output di ls -l abbiamo anche utente proprietario, gruppo proprietario (il gruppo principale dell'utente che ha creato il file), dimensione in byte, data e ore di ultima modifica e nome file. Quindi possiamo dire che:

Il file è leggibile da tutti (utente, gruppo e altri), è  scrivibile solo dall'utente fabrizio e non è esegubile da nessuno.

Il pemesso più arcano è l'esecuzione, cosa vuol dire che un file è eseguibile? Proprio quello che si pensa, un programma o uno script per essere lanciati debbono essere eseguibili (no non serve che sia un .exe), analogamente non è possibile entrare all'interno di una directory se essa non è eseguibile. Se invece di un file creiamo una cartella abbiamo invece:

mkdir tutorial
ls -l tutorial
drwxr-xr-x 2 fabrizio hptteam 4096 Nov 18 15:52 tutorial 

Un file di tipo d, leggibile ed eseguibile da tutti ma scrivibile solo dall'utente fabrizio.

Cambiamo i permessi sui file

Giochiamo un po' con i permessi avvalendoci del comando chmod. Tale comando è molto potente per scoprirne le funzionalità faremo un esempio. Facciamo finta che il file tutorial.txt sia un file molto popolare, che ne so questo tutorial, facciamo conto che questo tutorial invece di essere scritto solo da me sia stato scritto a 8 mani e che quindi il gruppo hptteam sia formato da 4 utenti. Mettiamo anche che un quinto utente (magari l'utente www-data, quindi voi) debba poter leggere il file. I permessi sono praticamente corretti, ci serve solo che il gruppo hptteam possa scrivere, lanciamo:

chmod g+w tutorial.txt

l'output di ls adesso diventa

-rw-rw-r-- 1 fabrizio hptteam 0 Nov 18 15:38 tutorial.txt

Quindi se vogliamo cambiare i permessi per l'utente anteponiamo al + (o al - se vogliamo rimuovere il permesso) la lettera:

  • u (user) per l'utente
  • g (group) per il gruppo
  • o (other) per gli altri
  • a (all)

Mettiamo che l'utente fabrizio diventi alla fine geloso del suo file ha due strade:

Strada uno: togliere i permessi di lettura, scrittura ed esecuzione per il gruppo e per gli altri

chmod og-rwx tutorial.txt

che da risultato

-rwx------ 1 fabrizio hptteam 0 Nov 18 15:38 tutorial.txt

Strada due cambiare il gruppo proprietario del file e togliere i permessi di lettura ed esecuzione per gli altri

Cambiamo prima il gruppo (il gruppo fabrizio è il gruppo che il sistema crea per l'utente e sulla carta contiene solo l'utente) con:

chgrp fabrizio tutorial.txt

oppure (utente:gruppo)

chown fabrizio:fabrizio tutorial.txt

e poi i permessi per gli "altri":

chmod o-rwx tutorial.txt

Il risultato di ls adesso è:

-rwxrwx--- 1 fabrizio fabrizio 0 Nov 18 15:38 tutorial.txt

Permessi in notazione ottale

Il comando chmod permette anche l'uso della notazione ottale per l'esposizione dei permessi. I permessi nella notazione ottale sono così esposti:

  • 4 permesso di lettura
  • 2 permesso di scrittura
  • 1 permesso di esecuzione
  • 0 nessun permesso

L'esposizione deve essere fatta per tutti i tipi di utente e ovviamente permesso multiplo uguale addizione. Mi spiego meglio riportando tutte le possibili combinazioni:

  • 0 non si può far nulla
  • 1 solo esecuzione
  • 2 solo scrittura
  • 3 scrittura ed esecuzione (2 + 1)
  • 4 sola lettura
  • 5 lettura ed esecuzione (4 + 1)
  • 6 lettura e scrittura (4 + 2)
  • 7 lettura, scrittura ed esecuzione (4 + 2 +1)

Quindi tornando al nostro primo esempio se voglio che il file sia leggibile e scrivibile dall'utente e dal gruppo e solo leggibile dagli altri userò il comando:

chmod 664 tutorial.txt

Con output di ls

-rw-rw-r-- 1 fabrizio hptteam 0 Nov 18 15:38 tutorial.txt

Il tutorial è finito alla prossima