4.5.3 Permessi di accesso a file e directory
I permessi di accesso a file e directory vengono definiti separatamente per
ciascuna delle seguenti tre categorie di utenti:
-
l' utente che � proprietario del file (u),
-
gli altri utenti nel gruppo a cui il file appartiene (g) e
-
tutti gli altri utenti (o).
Dato un file, ciascun permesso corrispondente permette:
-
read (lettura) (r): di esaminare il contenuto del file,
-
write (scrittura) (w): di modificare e
-
execute (esecuzione) (x): di eseguire il file come un comando.
Data una directory, ciascun permesso corrispondente permette:
-
read (r): di elencare i contenuti della directory,
-
write (w): di aggiungere o rimuovere i file nella directory e
-
execute (x): di accedere ai file nella.
In questo caso il permesso in esecuzione sulla directory non
solo permette di leggere i file nella directory, ma anche di vedere i lori
attributi, come le dimensioni e la data dell'ultima modifica.
per mostrare le informazioni sui permessi (e molto altro) dei file e delle
directory si usa ls
. Vedere ls(1)
. Quando
ls
viene invocato con l'opzione -l mostrer� le
seguenti informazioni, nell'ordine:
-
tipo di file (primo carattere)
-
i permessi di accesso al file (i nove caratteri successivi,
consistenti di tre caratteri per ciascuno, utente, gruppo ed altri, in
quest'ordine)
-
il numero di hard links al file
-
il nome dell' utente a cui appartiene
-
il nome del gruppo a cui il file appartiene
-
le dimensioni del file in caratteri (bytes)
-
data ed ora del file (mtime)
-
il nome del file.
Per cambiare il proprietario del file, si usa chown
dall'account
di root. Per cambiarne il gruppo, si utlizza chgrp
o dall'account
del proprietario, o da quello di root. Per cambiare i permessi di accesso al
file ed alla directory, si usa chmod
dall'account del
proprietario, o da quello di root. La sintassi di base per manipolare un dato
file foo
file �:
# chown nuovoproprietario foo
# chgrp nuovogruppo foo
# chmod [ugoa][+-=][rwx][,...] foo
Vedere chown(1)
, chgrp(1)
, e chmod(1)
per i dettagli.
Per esempio, per rendere proprietario di una directory l'utente foo
e condivisa da un gruppo bar, eseguite i seguenti comandi
dall'account di root:
# cd /una/locazione/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .
Esistono altri tre bit di permessi speciali:
-
set user ID (s o S invece della x di user),
-
set group ID (s o S invece della x di group), and
-
sticky bit (t o T invece della x di other).
In questo caso l'output di ls -l
per detti bit viene dato in
maiuscolo se la modalit� nascosta per i bit di esecuzione non � impostata.
Impostare set user ID su un file eseguibile permette
all'utente di eseguirlo con l'owner ID del file (per esempio
root). Allo stesso modo, impostare set group
ID su un eseguibile permette all'utente di eseguirlo con il group ID
del file (per esempio root). Poich� queste impostazioni
possono causare seri problemi di sicurezza, abilitarle richide estrema cautela.
Impostare set group ID su una directory abilita lo schema di
creazione dei file stile BSD, dove tutti i file creati nella directory
appartengono al gruppo della directory.
Impostare lo sticky bit in una directory previene la rimozione
di un file in detta directory da un utente che non sia il proprietario del
file. Per rendere sicuro il contenuto di un file in una directory scrivibile
da tutti, come ad esempio /tmp
o in diretory scrivibile dal
gruppo, non bisogna solamente disabilitare i permessi in
scrittura del file, ma anche impostare lo sticky
bit nella directory. Altrimenti il file potrebbe essere rimosso e
sostituito da un nuovo fiole con lo stesso nome, da qualsiasi utente con
accesso in scrittura alla directory.
Ecco alcuni esempi interessanti sui permessi.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp
-rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd
-rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow
-rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp
drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local
drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src
drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail
drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp
Esiste un metodo numerico alternativo di descrivere i permessi per i comandi
chmod(1)
. Questo metodo usa numeri da 3 a 4 cifre in ottale (base
8). Ogni cifra corrisponde a:
-
1a cifra facoltativa: la somma di set user ID (=4),
set group ID (=2), e sticky bit (=1)
-
2a cifra: la somma dei permessi lettura (=4),
scrittura (=2), e esecuzione (=1) per l'
utente
-
3a cifra: idem per il gruppo
-
4a cifra: idem per other
Suona complicato, ma � in effetti molto semplice. Se guardate alle prime
(2-10) colonne dell'output del comando ls -l e le leggete come una
rappresentazione binaria (base 2) dei permessi dei file ("-" essendo
"0" e "rwx" essendo "1"), il valore numerico
diventa una rappresentazione in ottale dei permessi. [33] Provate ad esempio:
$ touch foo bar
$ chmod u=rw,go=r foo
$ chmod 644 bar
$ ls -l foo bar
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 foo
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 bar
La maschera di default dei permessi pu� essere impostata tramite il comando di
shell umask
. Vedere builtins(7)
.