3.3 I Permessi

FreeBSD, essendo un discendente diretto dello UNIX® BSD, si basa su molti concetti chiave di UNIX. Il primo e il più affermato è che FreeBSD è un sistema operativo multi-utente. Il sistema può gestire diversi utenti che lavorano contemporaneamente su operazioni indipendenti. Il sistema è responsabile della gestione e della suddivisione appropriata delle richieste di utilizzo dei dispositivi hardware, delle periferiche, della memoria, e del tempo di CPU in modo equo per ogni utente.

Poichè il sistema è in grado di supportare più utenti, tutto ciò che il sistema gestisce possiede un insieme di permessi che determinano chi può leggere, scrivere, ed eseguire la risorsa. Questi permessi sono memorizzati mediante tre ottetti suddivisi in tre parti, una per il proprietario del file, una per il gruppo al quale il file appartiene, e una per tutti gli altri. Questa rappresentazione numerica funziona in questo modo:

Valore Permessi Listato nella Directory
0 Lettura no, scrittura no, esecuzione no ---
1 Lettura no, scrittura no, esecuzione --x
2 Lettura no, scrittura, esecuzione no -w-
3 Lettura no, scrittura, esecuzione -wx
4 Lettura, scrittura no, esecuzione no r--
5 Lettura, scrittura no, esecuzione r-x
6 Lettura, scrittura, esecuzione no rw-
7 Lettura, scrittura, esecuzione rwx

Puoi usare l'opzione -l del comando ls(1) per visualizzare un lungo listato della directory che include una colonna contenente le informazioni sui permessi del file per il proprietario, per il gruppo, e per gli altri. Per esempio, digitando ls -l in una arbitraria directory:

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
...

Ecco come è suddivisa la prima colonna dell'output del comando ls -l:

-rw-r--r--

Il primo carattere (partendo da sinistra) indica se il file in questione è un file regolare, una directory, un file speciale per dispositivi a caratteri, una socket, o un file speciale per altri dispositivi. Nel nostro caso, il - indica un file regolare. I tre caratteri successivi, che in questo esempio sono rw-, indicano i permessi per il proprietario del file. Seguono altri tre caratteri, r--, che indicano i permessi del gruppo al quale il file appartiene. Gli ultimi tre caratteri, r--, indicano i permessi per il resto del mondo. Un trattino significa che il permesso non viene concesso. Nel caso di questo file, i permessi sono settati affinchè il proprietario possa leggere e scrivere il file, il gruppo possa leggere il file, e il resto del mondo possa solamente leggere il file. In accordo con la precedente tabella, i permessi per questo file sono 644, dove ogni cifra rappresenta una delle tre parti che costituiscono i permessi del file.

D'accordo, ma in che modo il sistema controlla i permessi sui dispositivi? FreeBSD tratta molti dispositivi hardware esattamente come un file che i programmi possono aprire, leggere, e scrivere dei dati proprio come avviene con gli altri file. Questi file speciali per i dispositivi sono memorizzati nella directory /dev.

Anche le directory sono trattate come file. Queste hanno permessi di lettura, scrittura e di esecuzione. Il bit riferito al permesso di esecuzione per una directory ha un significato leggermente differente rispetto a quello dei file. Quando una directory ha il permesso di esecuzione abilitato, significa che si ha accesso alla directory, ossia è possibile eseguire il comando “cd” (cambio di directory) per entrarci. Inoltre questo significa che all'interno della directory è possibile accedere ai file dei quali si conosce il nome (naturalmente a condizione dei permessi degli stessi file).

In particolare, per visualizzare il contenuto di una directory, deve essere abilitato il permesso di lettura sulla stessa, mentre per eliminare un file di cui si conosce il nome, è necessario che la directory contenente il file abbia i permessi di scrittura e di esecuzione abilitati.

Ci sono altri bit per permessi particolari, ma sono in genere usati in circostanze speciali come il permesso di setuid per i binari e quello di sticky per le directory. Se vuoi avere più informazioni sui permessi dei file e su come settarli, guarda la pagina man di chmod(1).

3.3.1 Permessi Simbolici

Contributo di Tom Rhodes.

I permessi simbolici, qualche volta chiamati espressioni simboliche, usano caratteri al posto dei numeri ottali per assegnare i permessi a file o directory. Le espressioni simboliche usano la sintassi (chi) (azione) (permessi), con i seguenti valori:

Opzione Lettera Cosa rappresenta/Cosa fa
(chi) u Utente
(chi) g Gruppo di appartenenza
(chi) o Altri
(chi) a Tutti (tutto il “mondo”)
(azione) + Aggiunge i permessi
(azione) - Rimuove i permessi
(azione) = Setta esplicitamente i permessi
(permessi) r Lettura
(permessi) w Scrittura
(permessi) x Esecuzione
(permessi) t Bit sticky
(permessi) s Setta UID o GID

Questi valori sono usati con il comando chmod(1) come esposto in precedenza, ma con le lettere. Per esempio, puoi usare il seguente comando per impedire agli altri utenti l'accesso a FILE:

% chmod go= FILE

Se si ha la necessità di realizzare più di una modifica ai settaggi di un file si può usare una lista di settaggi separati da virgola. Per esempio il seguente comando rimuoverà il permesso di scrittura su FILE al gruppo di appartenenza del file e al resto del “mondo”, e inoltre aggiungerà il permesso di esecuzione per tutti:

% chmod go-w,a+x FILE

3.3.2 Flag dei File in FreeBSD

Contributo di Tom Rhodes.

Oltre ai permessi dei file discussi in precedenza, FreeBSD supporta l'uso dei “flag dei file”. Queste flag aggiungono un ulteriore livello di sicurezza e di controllo sui file, ma non per le directory.

Queste flag dei file aggiungono un ulteriore livello di controllo sui file, assicurando in alcuni casi che persino root non possa rimuovere o alterare file.

Le flag dei file sono alterate usando l'utility chflags(1), tramite una semplice sintassi. Per esempio, per abilitare la flag di sistema di non-cancellabilità sul file file1, si può usare il comando seguente:

# chflags sunlink file1

E per disabilitare la stessa flag, si può usare semplicemente il comando precedente con “no” davanti a sunlink. Ecco come:

# chflags nosunlink file1

Per vedere le flag del file di esempio, usa il comando ls(1) con le flag -lo:

# ls -lo file1

L'output dovrebbe assomigliare al seguente:

-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

Diverse flag possono essere aggiunte o rimosse sui file solo tramite l'utente root. Negli altri casi, il proprietario dei file può settare queste flag. Si raccomanda di leggere le pagine man chflags(1) e chflags(2) per maggiori informazioni.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.