[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 33.   Permessi

I permessi definiscono i privilegi dell'utente proprietario, del gruppo e degli altri utenti nei confronti dei file e delle directory.

La sezione 19.7.3 introduce i problemi legati ai permessi, in particolare spiega il modo in cui si rappresentano in forma numerica.

33.1   Permessi sui file

Sui file possono essere regolati tre tipi di permessi: lettura, scrittura ed esecuzione. Mentre il significato del permesso di esecuzione è abbastanza logico (riguarda i file eseguibili e gli script), così come lo è anche quello in lettura, quello in scrittura potrebbe fare pensare che permetta di evitarne la cancellazione. Non è così, la possibilità di cancellare un file dipende dai permessi della directory.

touch mio_file[Invio]

chmod -r mio_file[Invio]

In questo modo è stato tolto il permesso di lettura a tutti gli utenti, compreso il proprietario.

ls -l mio_file[Invio]

--w--w----   1 tizio    tizio           0 Dec 26 10:24 mio_file

Si può vedere che dalla stringa dei permessi è sparita la lettera r.

cat mio_file[Invio]

cat: mio_file: Permission denied

L'emissione sullo schermo del file è impossibile perché non c'è il permesso di lettura (in questo caso il file è vuoto e non c'è proprio nulla da visualizzare, ma qui conta il fatto che il sistema si opponga alla lettura).

chmod +r mio_file[Invio]

Prima di verificare cosa accade togliendo il permesso di scrittura conviene ripristinare il permesso di lettura, con il comando appena visto.

chmod -w mio_file[Invio]

In questo modo viene tolto il permesso di scrittura, cosa che impedisce la modifica del file, ma non la sua cancellazione.

ls > mio_file[Invio]

bash: mio_file: Permission denied

Un tentativo di sovrascrittura genera una segnalazione di errore, come nell'esempio appena visto, così come qualunque altro tentativo di modificare il suo contenuto.

mv mio_file tuo_file[Invio]

Lo spostamento o il cambiamento del nome è possibile.

ls -l tuo_file[Invio]

-r--r--r--   1 tizio    tizio           0 Dec 26 10:24 tuo_file

Anche la cancellazione è ammissibile; probabilmente si ottiene un avvertimento, ma niente di più.

rm tuo_file[Invio]

rm: remove `tuo_file', overriding mode 0444? 

y[Invio]

Il file, alla fine, viene cancellato.

33.2   Permessi sulle directory

Sulle directory possono essere regolati tre tipi di permessi: lettura, scrittura e accesso (ovvero «attraversamento», che corrisponde al permesso di esecuzione dei file). Per chi non conosce già un sistema operativo Unix, il significato potrebbe non essere tanto intuitivo.

mkdir provedir[Invio]

touch provedir/uno[Invio]

touch provedir/due[Invio]

Togliendo il permesso di lettura si impedisce la lettura del contenuto della directory, cioè si impedisce l'esecuzione di un comando come ls, mentre l'accesso ai file continua a essere possibile (purché se ne conoscano i nomi).

chmod -r provedir[Invio]

ls provedir[Invio]

ls: provedir: Permission denied

Prima di proseguire si ripristinano i permessi di lettura.

chmod +r provedir[Invio]

I permessi di scrittura consentono di aggiungere, eliminare e rinominare i file (comprese le eventuali sottodirectory).

chmod -w provedir[Invio]

Questo comando toglie il permesso di scrittura della directory provedir/.

rm provedir/uno[Invio]

rm: provedir/uno: Permission denied

cp provedir/uno provedir/tre[Invio]

cp: cannot create regular file `provedir/tre': Permission denied

mv provedir/uno provedir/tre[Invio]

mv: cannot move `provedir/uno' to `provedir/tre': Permission denied

Prima di proseguire si ripristina il permesso di scrittura.

chmod +w provedir[Invio]

Il permesso di accesso è il più strano. Impedisce l'accesso alla directory e a tutto il suo contenuto. Ciò significa che non è possibile accedere a file o directory discendenti di questa.

Viene creata una directory discendente da provedir/.

mkdir provedir/tmp[Invio]

Si crea un file al suo interno, per poter verificare in seguito quanto affermato.

touch provedir/tmp/esempio[Invio]

Si tolgono i permessi di accesso a provedir/ per vedere cosa accade.

chmod -x provedir[Invio]

Da questo momento, provedir/ e tutto quello che ne discende è inaccessibile.

cd provedir[Invio]

bash: cd: provedir: Permission denied

cat provedir/tmp/esempio[Invio]

cat: provedir/tmp/esempio: Permission denied

touch provedir/tmp/esempio2[Invio]

touch: provedir/tmp/esempio2: Permission denied

33.3   Maschera dei permessi: umask

La maschera dei permessi, ovvero la maschera umask, determina i permessi che devono essere tolti quando si crea un file o una directory e non si definiscono esplicitamente i loro permessi. Nello stesso modo, quando si attribuiscono dei permessi senza definire a quale livello si riferiscono (all'utente, al gruppo o agli altri, come è stato fatto nelle sezioni precedenti), vengono tolti quelli della maschera dei permessi. Per conoscere il valore di questa maschera basta il comando seguente:

umask[Invio]

0002

Ciò che si ottiene dipende dalla configurazione del sistema; frequentemente, il valore della maschera dei permessi è 00228.

Il numero due rappresenta un permesso di scrittura, in questo caso riferito agli utenti differenti dal proprietario e dal gruppo di appartenenza. Questo significa che il permesso viene tolto in modo predefinito. Se il valore fosse 00228, anche al gruppo verrebbe tolto il permesso di scrittura.

Si può ottenere una rappresentazione della maschera dei permessi più espressiva con l'opzione -S.

umask -S[Invio]

u=rwx,g=rwx,o=rx

In tal caso si è ottenuta la rappresentazione dei permessi che vengono concessi in modo predefinito.

Si suppone, per esercizio, di trovarsi nella situazione di volere difendere i propri dati da qualunque accesso da parte degli altri utenti (a eccezione dell'utente root al quale nulla può essere impedito).

umask 0077[Invio]

Il numero sette rappresenta tutti i permessi (lettura, scrittura ed esecuzione-accesso) e questi vengono tolti sistematicamente al gruppo e agli altri utenti. Per verificarlo si può provare a creare un file.

touch segreto[Invio]

ls -l segreto[Invio]

-rw-------   1 tizio    tizio           0 Dec 27 11:10 segreto

Il comando touch non ha tentato di attribuire dei permessi di esecuzione, quindi questo permesso non appare tra quelli dell'utente proprietario.

mkdir segreta[Invio]

ls -l[Invio]

...
drwx------   2 tizio    tizio        1024 Dec 27 11:14 segreta
...

Come si vede dall'esempio, anche la creazione di directory risente della maschera dei permessi.

33.4   Conclusione

Il significato dei permessi di file e directory non è necessariamente intuitivo o evidente. Un po' di allenamento è necessario per comprenderne il senso.

La maschera dei permessi, o umask, è un mezzo con cui filtrare i permessi indesiderati nelle operazioni normali, quelle in cui questi non vengono espressi in modo esplicito.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome permessi.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!