13.14. Proprietà e permessi

All'inizio di questo capitolo è stato presentato l'esempio per spostarsi nella directory del login di root e avete ricevuto il seguente messaggio:

cd /root
bash: /root: Permission denied

Si tratta di un esempio delle caratteristiche di sicurezza di Linux. Linux, come UNIX, è un sistema multiutente e i permessi sui file consentono di proteggere l'integrità del sistema da ogni tipo di danno.

Un modo per ottenere l'accesso ai file è digitare il comando su per collegarsi come utente root, come appreso in precedenza, perché chi conosce la password di root ha accesso completo.

Tuttavia, collegarsi come superutente non sempre conviene, perché è facile modificare o danneggiare importanti file di configurazione.

Tutti i file e le directory hanno un "proprietario", ossia una persona che li ha creati. Voi avete creato il file sneakers.txt (vedere nella Sezione 13.9.1) nella vostra directory di login, quindi sneakers.txt "appartiene" a voi.

Questo significa che potete specificare chi ha il permesso di leggerlo, modificarlo o, nel caso si tratti di un'applicazione, chi può eseguirlo.

Leggere, scrivere ed eseguire sono le tre azioni principali regolate dai permessi. Dal momento che ogni utente del sistema è inserito in un gruppo, potete anche specificare quali gruppi di utenti possono leggere, modificare, o eseguire un file.

Riesaminate il file sneakers.txt con il comando ls utilizzando l'opzione -l (lunga) (vedere la Figura 13-11).

Con questa opzione si visualizzano alcuni dettagli aggiuntivi. Potete vedere chi può leggere (r) e scrivere (w) il file, il proprietario (sam) e a quale gruppo di utenti appartiene (sam). Ricordate che il vostro gruppo di default è uguale al vostro nome di login.

Figura 13-11. Permessi per sneakers.txt

A destra del nome del gruppo sono presenti informazioni sulla dimensione, la data, l'ora di creazione e il nome del file.

La prima colonna indica i permessi attuali e ha dieci posizioni. La prima posizione rappresenta il tipo di file. Le altre nove posizioni sono in realtà tre insiemi di permessi per tre categorie differenti di utenti.

Per esempio:

-rw-rw-r--

Le categorie sono: il proprietario del file, il gruppo a cui appartiene il file e "others" (altri), ossia gli altri utenti e gruppi nel sistema.

-    (rw-)   (rw-)   (r--) 1 sam sam 
|      |       |       | 
type  owner  group   others
      

Nella prima posizione, che specifica il tipo di file, potete trovare uno dei valori seguenti:

Dopo il primo carattere, nei tre gruppi che seguono, visualizzerete uno dei valori seguenti:

Quando in uno di questi campi compare un trattino, significa che un particolare permesso non è stato concesso. Osservate nuovamente la prima colonna del file sneakers.txt e identificate i suoi permessi.

ls -l sneakers.txt
-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

Il proprietario del file, in questo caso sam, ha i permessi di lettura e scrittura per il file. Anche il gruppo, in questo caso sam, ha i permessi di lettura e scrittura per sneakers.txt. Dato che il file non è un programma, il proprietario e il gruppo non hanno il permesso di eseguirlo.

13.14.1. Il comando chmod

Utilizzate il comando chmod per modificare con facilità i permessi. Questo esempio mostra come modificare i permessi del file sneakers.txt con il comando chmod.

Il file originale sarà simile al seguente, con le impostazioni dei permessi iniziali:

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

Se siete il proprietario del file o siete collegati come account root potete modificare qualsiasi permesso per il proprietario, il gruppo ed altri.

In questo momento, solo il proprietario e il gruppo possono leggere e scrivere il file. Gli altri utenti o gruppi possono solo leggere il file (r--).

CautelaAttenzione
 

Non dimenticate che i permessi dei file sono importanti per la sicurezza. Se chiunque potesse leggere, scrivere o eseguire i vostri file, aumenterebbe il rischio di modifica, danneggiamento o cancellazione dei file. Come regola, dunque, concedete i permessi di lettura e di scrittura solo a chi davvero ne ha bisogno.

Nell'esempio riportato di seguito, supponete di voler concedere a chiunque il permesso di scrittura su un file, in modo che possano leggerlo, scriverci sopra e salvarlo. Ciò significa che dovrete cambiare i permessi nella sezione "altri".

Innanzitutto date uno sguardo al file digitando al prompt della shell:

ls -l sneakers.txt

Il comando precedente visualizza le seguenti informazioni:

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

Ora digitate quanto segue:

chmod o+w sneakers.txt

Il comando o+w indica al sistema che desiderate concedere ad "altri" il permesso di scrittura per il file sneakers.txt. Per controllare i risultati, visualizzate di nuovo l'elenco dettagliato del file. Questo è:

-rw-rw-rw-    1 sam sam     150 Mar 19 08:08 sneakers.txt

Adesso chiunque avrà la possibilità di leggere e modificare il file.

Per rimuovere i permessi di lettura e scrittura dal file sneakers.txt utilizzate il comando chmod.

chmod go-rw sneakers.txt

Digitando go-rw, avete indicato al sistema di rimuovere i permessi di lettura e scrittura relativi al file sneakers.txt per il gruppo e gli "altri".

Il risultato sarà simile al seguente:

-rw-------    1 sam sam    150 Mar 19 08:08 sneakers.txt

Potete immaginare queste impostazioni come una specie di stenografia quando desiderate cambiare i permessi con chmod, poiché tutto ciò che vi occorre ricordare sono pochi simboli e lettere da associare al comando chmod.

Ecco un elenco delle opzioni possibili:

Identità

u — l'utente che possiede il file (ossia il proprietario)

g — il gruppo a cui appartiene l'utente

o — altri (né il proprietario né il gruppo del proprietario)

a — tutti (u, g e o)

Permessi

r — accesso di lettura

w — accesso di scrittura

x — accesso di esecuzione

Azioni

+ — aggiunge il permesso

- — rimuove il permesso

= — rende unico il permesso

Per verificare le vostre capacità in fatto di permessi, rimuovete tutti i permessi da sneakers.txt — a tutti.

chmod a-rwx sneakers.txt

Ora verificate se è possibile leggere il file con il comando cat sneakers.txt, il risultato sarà simile al seguente:

cat: sneakers.txt: Permission denied

Rimuovendo tutti i permessi, incluso il vostro, avete negato ogni accesso al file. Ma dato che voi siete il proprietario del file, potete sempre ripristinare i permessi utilizzanto il comando segiente:

chmod u+rw sneakers.txt

Utilizzate il comando cat sneakers.txt per verificare che voi, il prorietario del file, potete leggerlo ancora.

Ecco alcuni esempi comuni di impostazioni da utilizzare con chmod:

Aggiungendo l'opzione -R, potete cambiare i permessi per l'intero albero della directory in cui vi trovate.

Esiste tuttavia una limitazione, dal momento che non potete "eseguire" una directory come se fosse un'applicazione. Quando aggiungete o rimuovete i permessi di esecuzione per una directory, state in realtà concedendo (o vietando) i permessi di ricerca dentro questa directory.

Se non concedete ad altri i permessi di esecuzione su tigger, non importa chi ha l'accesso di lettura e scrittura, perché nessuno può entrare nella directory, a meno che non conosca l'esatto nome del file.

Per esempio, digitate:

chmod a-x tigger

per negare i diritti di esecuzione a tutti gli utenti.

Ecco cosa accade quando provate a usare il comando cd per entrare nella directory tigger:

bash: tigger: Permission denied

Ripristinate i diritti di accesso al proprietario o al gruppo.

chmod ug+x tigger

Ora, se controllate il vostro lavoro con ls -l vedrete che solo gli "altri" non hanno accesso alla directory tigger.

13.14.2. Modifica dei permessi con i numeri

Ricordate il riferimento alla stenografia per l'uso di chmod? Ecco un altro modo per modificare i permessi che inizialmente potrà apparirvi leggermente più complesso.

Ritornate ai permessi originali del file sneakers.txt (digitate ls -l sneakers.txt ).

-rw-rw-r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

Ogni impostazione dei permessi può essere rappresentata da un valore numerico:

Quando questi valori vengono sommati tra di loro, il valore ottenuto è utilizzato per specificare i permessi. Se, per esempio, desiderate impostare i permessi di lettura e scrittura, dovrete utilizzare un valore di 6; 4 (lettura) + 2 (scrittura) = 6.

Nell'esempio potete vedere le impostazioni numeriche per sneakers.txt:

 -  (rw-)   (rw-)  (r--)
      |       |      |
    4+2+0   4+2+0  4+0+0

Il totale per gli utenti è sei, il totale per i gruppi è sei e il totale per gli altri è quattro. Perciò si ottiene 664.

Se volete cambiare il file sneakers.txt in modo che il vostro gruppo non abbia l'accesso per la scrittura, ma possa leggere il file, è necessario rimuovere l'accesso sottraendo due (2) a quel set di numeri.

I valori numerici sono quindi sei, quattro e quattro (644).

Per rendere effettive le nuove impostazioni, digitate:

chmod 644 sneakers.txt

Ora verificate le modifiche visualizzando il file. Digitate:

ls -l sneakers.txt

L'output dovrebbe essere:

-rw-r--r--    1 sam sam     150 Mar 19 08:08 sneakers.txt

Adesso né il gruppo né gli altri possono scrivere nel file sneakers.txt. Per ripristinare i diritti di scrittura del gruppo sul file, potete aggiungere il valore w (2) al secondo gruppo di permessi.

chmod 664 sneakers.txt

AttenzioneAttenzione!
 

I permessi 666 danno la possibilità a tutti di leggere o scrivere in un file o in una directory. I permessi 777 danno a tutti l'accesso in lettura, scrittura o esecuzione. Queste impostazioni possono creare problemi con i file più importanti, dunque non è una buona idea utilizzarle.

Ecco un elenco di alcune impostazioni e di alcuni valori numerici e dei rispettivi significati:

Ecco alcune impostazioni comuni per le directory: