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


Capitolo 176.   ACL POSIX con i sistemi GNU/Linux

La sigla «ACL» sta per Access control list e si riferisce qui a un'estensione della gestione dei permessi, rispetto alla tradizione dei sistemi Unix.

Come succede spesso, i nomi che rappresentano acronimi possono indicare cose differenti in contesti diversi. Nel caso particolare della sigla ACL, questa si usa anche in altre situazioni, specie nella gestione dell'accesso a servizi HTTP (serventi o proxy), dove si vuole regolare l'accesso al servizio o a delle risorse particolari. Ciò che si deve intendere è che la sigla ACL, anche se, come acronimo, fa riferimento alle stesse parole, rappresenta situazioni differenti in base al contesto.

POSIX ha prodotto alcune bozze sulla possibilità di estendere la gestione dei permessi dei sistemi Unix (POSIX 1003.1e e POSIX 1003.2c), ma tali lavori sono rimasti incompiuti. Queste bozze sono pubbliche e diversi sistemi Unix mettono a disposizione alcune di queste estensioni. Le estensioni a cui si fa riferimento con la sigla ACL, o eventualmente con «ACL POSIX» (benché si tratti solo di bozze), sono solo una porzione dell'insieme complessivo e in questo capitolo si vuole descrivere in particolare la realizzazione relativa ai sistemi GNU/Linux.

176.1   File system e programmi di servizio

La gestione delle estensioni ACL POSIX richiede che il file system sia in grado di accumulare le informazioni necessarie e che il kernel sia in grado di gestirle. Nel caso di un kernel Linux occorre abilitare la funzione nell'ambito della voce che consente la gestione di un certo file system (si veda la sezione 72.2.20).

A ogni modo, in un sistema GNU/Linux, il fatto che il kernel sia predisposto correttamente e che il file system sia adatto, non basta ad attivare la gestione delle estensioni ACL POSIX, perché è necessario innestare il file system con l'opzione acl:

/dev/hda2  /  ext3  defaults,acl,errors=remount-ro  0  1

L'esempio mostra una riga del file /etc/fstab, in cui si dichiara la partizione usata come file system principale. Come si vede, tra le opzioni appare anche la sigla acl per attivare la gestione che interessa.

Eventualmente, un file system può essere reinnestato aggiungendo tale opzione:

mount -o remount,acl /[Invio]

Per disabilitare le estensioni ACL si può usare l'opzione noacl:

mount -o remount,noacl /[Invio]

La gestione delle estensioni ACL POSIX richiede naturalmente la disponibilità di programmi di servizio appropriati. Nei sistemi GNU/Linux si usa il pacchetto ACL, (1) che si compone principalmente dei programmi getfacl e setfacl.

176.2   ACL POSIX

Nei confronti di un file (o di una directory), gli utenti di un sistema Unix sono classificati in tre classi: il proprietario del file; gli utenti che appartengono al gruppo a cui è associato il file; gli utenti che non rientrano nelle prime due classi. I permessi di un file (o di una directory) sono suddivisi in tre parti, che riguardano rispettivamente le tre classi di utenti.

Figura 176.2. Associazione tra le classi di utenti e i permessi secondo lo schema tradizionale dei sistemi Unix.

collegamenti

Quando si inseriscono le ACL POSIX, i file e le directory possono contenere informazioni più articolate nei confronti dei permessi si accesso e degli utenti a cui questi permessi si rivolgono. Le informazioni riguardo ai permessi dell'utente proprietario e degli utenti che non sono proprietari e non appartengono nemmeno al gruppo associato al file, sono gestite come nel sistema tradizionale. Oltre a questo, è possibile dichiarare espressamente utenti, oppure gruppi, a cui si associano dei permessi specifici. La gestione di questi utenti e gruppi particolari, assieme alla gestione dei permessi del gruppo a cui appartiene il file, è sottoposto al filtro di una maschera, che però non è collegato alla maschera dei permessi tradizionale (umask).

Figura 176.3. Associazione tra le classi di utenti e i permessi mostrati dal comando ls quando è attiva la gestione delle ACL POSIX.

collegamenti

La maschera dei permessi ACL rappresenta precisamente il massimo delle possibilità che ha un utente appartenente a quell'insieme costituito da: utenti e gruppi particolari, assieme al gruppo associato al file stesso. In altri termini: se anche un utente particolare avesse i permessi di lettura e scrittura su quel file, ma la maschera concedesse, come nell'esempio, soltanto la lettura ed esecuzione, tale utente potrebbe accedere al file soltanto in lettura.

Questo tipo di maschera va inteso quindi come la rappresentazione di ciò che è concesso, mentre la maschera dei permessi tradizionale rappresenta ciò che viene sottratto nel momento in cui si crea un file o una directory.

Le informazioni sui permessi relative alle estensioni ACL POSIX sono elencate nella tabella successiva, dove si vede in particolare il modo con cui questi vengono rappresentati.

Tabella 176.4. I tipi di voci che possono comporre i permessi secondo le estensioni ACL POSIX.

Voce Descrizione
user::permessi
Dichiarazione dei permessi associati all'utente proprietario (questi permessi non sono filtrati dalla maschera ACL).
group::permessi
Dichiarazione dei permessi associati agli utenti appartenenti al gruppo proprietario.
user:utente:permessi
Dichiarazione dei permessi associati a un utente particolare.
user:gruppo:permessi
Dichiarazione dei permessi associati agli utenti di un gruppo particolare.
mask::permessi
Dichiarazione della maschera dei permessi concessi a tutte le classi di utenti, escluso il proprietario e gli utenti che non ricadono in alcuna categoria specificata.
other::permessi
Dichiarazione dei permessi associati agli utenti che non vengono individuati in alcuna categoria particolare (questi permessi non sono filtrati dalla maschera ACL).

176.3   ACL in pratica

Se esistono i presupposti per usare le estensioni ACL POSIX (un kernel adatto e un file system compatibile, innestato con l'opzione acl), si possono fare delle prove per verificare la logica di questo sistema.

Si crea inizialmente la directory /tmp/ACL/ e ci si sposta al suo interno per comodità:

mkdir /tmp/ACL[Invio]

ls -l /tmp[Invio]

...
drwxr-xr-x    2 tizio    tizio        4096 2007-03-18 15:30 ACL
...

cd /tmp/ACL[Invio]

Da quanto mostrato, si comprende che si sta operando utilizzando l'utenza tizio, che appartiene al gruppo tizio (evidentemente si utilizza la gestione dei gruppi privati); inoltre, si comprende che la maschera dei permessi tradizionale ha il valore 00228, ma tanto vale controllare:

umask[Invio]

0022

Si crea un file vuoto e poi si verificano i permessi:

touch primo[Invio]

ls -l primo[Invio]

totale 0
-rw-r--r--    1 tizio    tizio           0 2007-03-18 15:36 primo

Con l'ausilio di getfacl si può vedere la descrizione dei permessi tradizionali in forma di ACL POSIX:

getfacl primo[Invio]

# file: primo
# owner: tizio
# group: tizio
user::rw-
group::r--
other::r--

Come si può osservare, le informazioni che si ottengono sono equivalenti alle solite che mostra il comando ls, tradotte però secondo la forma che appare nella tabella 176.4.

Con l'ausilio di setfacl si aggiungono dei permessi particolari di accesso all'utente caio:

setfacl -m user:caio:rw- primo[Invio]

Il comando, oltre che attribuire i permessi all'utente caio, predispone in modo predefinito una maschera appropriata:

getfacl primo[Invio]

# file: primo
# owner: tizio
# group: tizio
user::rw-
user:caio:rw-
group::r--
mask::rw-
other::r--

Conviene osservare anche cosa mostra il comando ls:

ls -l primo[Invio]

-rw-rw-r--+   1 tizio    tizio           0 2007-03-18 15:36 primo

Come si vede, alla fine della stringa che esprime i permessi appare il segno +, a indicare che sono presenti delle estensioni ACL e che il gruppo centrale di permessi è riferito alla maschera di queste estensioni e non più al gruppo proprietario.

A completamento dell'esempio si può aggiungere al file una voce riferita al gruppo sempronio, a cui si vuole concedere di scrivere e di eseguire il file:

setfacl -m group:sempronio:-wx primo[Invio]

Si può osservare che in condizioni normali, se non si specificano altre opzioni, la voce che rappresenta la maschera viene adattata in modo automatico:

getfacl primo[Invio]

# file: primo
# owner: tizio
# group: tizio
user::rw-
user:caio:rw-
group::r--
group:sempronio:-wx
mask::rwx
other::r--

ls -l primo[Invio]

-rw-rwxr--+   1 tizio    tizio           0 2007-03-18 15:36 primo

A questo punto si decide di intervenire direttamente sulla maschera, ma per farlo si può agire in due modi equivalenti:

setfacl -m mask::-w- primo[Invio]

Oppure:

chmod g=w primo[Invio]

Naturalmente, si può usare chmod anche per modificare i permessi associati all'utente proprietario o agli utenti che non sono individuabili in altri modi, così come si può usare setfacl con le voci user::permessi e other::permessi.

getfacl primo[Invio]

# file: primo
# owner: tizio
# group: tizio
user::rw-
user:caio:rw-           #effective:-w-
group::r--              #effective:---
group:sempronio:-wx     #effective:-w-
mask::-w-
other::r--

A questo punto si vede che la maschera, ridotta al solo permesso di scrittura, interviene sui permessi «efficaci» associati all'utente caio, al gruppo sempronio e agli utenti del gruppo proprietario. In base all'esempio, gli utenti del gruppo proprietario, avendo originariamente soltanto il permesso di lettura, dopo l'applicazione della maschera non hanno più alcun permesso di accesso.

Si osservi che l'adattamento automatico della maschera continua a persistere, nonostante la modifica manuale. Pertanto, se si aggiungono altri utenti e gruppi particolari, o se si interviene su quelli esistenti, la maschera viene aggiornata di conseguenza. Per evitarlo, quando si usa setfacl si aggiunge l'opzione -n.

Per cambiare i permessi di un utente o di un gruppo particolare basta impartire nuovamente il comando relativo, mentre per eliminare le voci di utenti e di gruppi particolari si usa l'opzione -x e non si specificano i permessi. Ecco come si eliminano le voci dell'utente caio e del gruppo sempronio:

setfacl -x user:caio: primo[Invio]

setfacl -x group:sempronio: primo[Invio]

getfacl primo[Invio]

# file: primo
# owner: tizio
# group: tizio
user::rw-
group::r--
mask::r--
other::r--

Se si elimina anche la maschera, il comando ls non mostra più la presenza di estensioni ACL POSIX:

setfacl -x mask:: primo[Invio]

ls -l primo[Invio]

-rw-r--r--    1 tizio    tizio           0 2007-03-18 15:36 primo

176.4   Ereditarietà

I permessi con le estensioni ACL POSIX per le directory funzionano come per i file normali, con la differenza che è possibile stabilire delle voci predefinite.

Si inseriscono delle voci predefinite con l'opzione -d di setfacl e la prima volta vengono utilizzati anche i dati delle voci generali che appartengono già alla directory (utenti e gruppi particolari vengono ignorati). Per comprendere il meccanismo è necessario procedere con degli esempi, che continuano da quanto lasciato nella sezione precedente.

mkdir seconda[Invio]

Inizialmente, nulla di strano:

getfacl seconda[Invio]

# file: seconda
# owner: tizio
# group: tizio
user::rwx
group::r-x
other::r-x

Si aggiunge una voce relativa all'utente caio, cui si concede anche di aggiungere e cancellare dei file:

setfacl -m user:caio:rwx seconda[Invio]

getfacl seconda[Invio]

# file: seconda
# owner: tizio
# group: tizio
user::rwx
user:caio:rwx
group::r-x
mask::rwx
other::r-x

Come già visto nella sezione precedente, la gestione delle estensioni ACL POSIX diventa attiva e si ottiene anche una maschera predefinita.

A questo punto si stabiliscono i permessi predefiniti, aggiungendo un altro utente particolare, che però può solo modificare e attraversare le directory:

setfacl -d -m user:mevio:-wx seconda[Invio]

getfacl seconda[Invio]

# file: seconda
# owner: tizio
# group: tizio
user::rwx
user:caio:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:mevio:-wx
default:group::r-x
default:mask::rwx
default:other::r-x

Come si vede, appaiono alla fine delle voci precedute dalla sigla default.

Per dare un senso alle voci predefinite, occorre creare qualcosa all'interno della directory in questione:

cd seconda[Invio]

touch terzo[Invio]

getfacl terzo[Invio]

# file: terzo
# owner: tizio
# group: tizio
user::rw-
user:mevio:-wx  #effective:-w-
group::r-x      #effective:r--
mask::rw-
other::r--

I permessi (estesi) che ha ottenuto il file terzo dipendono però da quelli che il file otterrebbe in mancanza delle estensioni ACL POSIX. In questo caso, in presenza di una maschera dei permessi 00228, trattandosi di un file, si otterrebbero permessi del tipo 06448, ovvero rw-r--r--. Da quanto ottenuto si intende che la maschera ACL non ne è influenzata.

Se si crea una directory, questa eredita anche le voci predefinite:

mkdir quarta[Invio]

getfacl quarta[Invio]

# file: quarta
# owner: tizio
# group: tizio
user::rwx
user:mevio:-wx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:mevio:-wx
default:group::r-x
default:mask::rwx
default:other::r-x

Per eliminare le voci predefinite, si usa l'opzione -k:

setfacl -k quarta[Invio]

getfacl quarta[Invio]

# file: quarta
# owner: tizio
# group: tizio
user::rwx
user:mevio:-wx
group::r-x
mask::rwx
other::r-x

176.5   Riferimenti

176.6   Altri programmi affini

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


1) ACL   GNU LGPL e GNU GPL

2) attr   GNU LGPL


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

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

Valid ISO-HTML!

CSS validator!