Liste di controllo accessi

Negli Anni 90 uno dei comitati per la definizione degli standard POSIX (individuato dalla sigla IEEE 1003.1e) halavorato a un insieme di estensioni di sicurezza per UNIX. Lostandard fu abbandonato quando fi nirono i fondi, ma molteparti erano già complete, e alcune di esse sono state inseritein Linux. Le liste di controllo dell’accesso ai fi le (ACL, Access Control List) sono tra queste. Il modello standard dei permessi
di accesso ai fi le dovrebbe essere ben noto a tutti: ci sono permessi di lettura, scrittura ed esecuzione e ognuno di essi può essere impostato per il proprietario del fi le, per i membri del gruppo a cui appartiene il fi le o per tutti gli altri. Ed è tutto.Le ACL estendono il modello in modo da consentire l’assegnazione di permessi di lettura, scrittura ed esecuzione per qualsiasi utente o gruppo. I filesystem ext2 ed ext3 supportano le ACL, ma solo se montati con l’opzione acl:

sudo mount -o acl /dev/sda2 /home

Naturalmente se vogliamo qualcosa di defi nitivo dobbiamo aggiungere l’opzione in /etc/fstab:

/dev/sda2 /home ext3 acl 0 0

Supponendo che le ACL siano abilitate, è possibile usare i comandi setfacl e getfacl per gestirle. Esaminiamo una semplice sequenza di comandi per mostrare come funziona il tutto. Per prima cosa creiamo un fi le chiamato
foo e impostiamone i permessi a 600:

touch foo
chmod 600 foo
ls -l foo
-rw------- 1 chris chris 0 2009-12-18 14:45 foo

Automaticamente verrà creata anche l’ACL del fi le che conterrà tre elementi corrispondenti ai tradizionali permessi di accesso. Per esaminarla usiamo il comando getfacl (che mostra anche alcune informazioni che non abbiamo riportato perché non cambiano nel corso del nostro tutorial):

getfacl foo
user::rwgroup::---
other::---

Queste informazioni rimangono automaticamente allineate ai permessi tradizionali: le modifi che fatte con chmod sono immediatamente visibili con getfacl e le modifi che fatte con setfacl sono immediatamente visibili con ls -l. La cosa che faremo ora è aggiungere nuovi elementi alla ACL, dando accesso in lettura e scrittura all’utente Tom e accesso
in lettura al gruppo Games:

setfacl -m u:tom:rw foo ; setfacl -m g:games:r foo
getfacl foo
user::rwuser:
tom:rwgroup::---
group:games:r--
mask::rwother::---

Le cose cominciano a diventare complicate quando impostiamo la maschera di una ACL. La maschera è usata per restringere in permessi per tutti gli utenti e i gruppi presenti nell’ACL, escluso il proprietario. Ora imposteremo una maschera di sola lettura e poi esamineremo di nuovo la ACL. Notate come i permessi effettivi di Tom siano stati ridotti

setfacl -m m::r foo ; getfacl foo
user::rwuser:
tom:rw- #effective:r--
group::---
group:games:r--
mask::r--
other::---

Infine possiamo rimuovere un elemento di un’ACL così:

setfacl -x g:games: foo ; getfacl foo
user::rwuser:
tom:rwgroup::---
mask::rwother::---

dalla maschera: ora ha accesso in sola lettura,non più in lettura e scrittura:

setfacl -m m::r foo ; getfacl foo
user::rwuser:
tom:rw- #effective:r--
group::---
group:games:r--
mask::r--
other::---

Infine possiamo rimuovere un elemento di un’ACL così:

setfacl -x g:games: foo ; getfacl foo
user::rwuser:
tom:rwgroup::---
mask::rwother::---

ls non è in grado di mostrare l’ACL completa di un fi le, ma quando viene specifi cata l’opzione -l segnala la presenza di un’ACL mettendo un + dopo il nono bit dei permessi:

ls -l foo
-rw-r-----+ 1 chris chris 0 2009-12-18 14:45 foo

Ci sono un paio di altri sistemi per creare l’ACL di un fi le.Primo, è possibile chiedere a setfacl di leggere l’ACL da un file o dallo standard input. Il seguente esempio mostra come copiare l’ACL da foo a bar:

getfacl foo1 | setfacl --set-fi le=- bar

Secondo, è possibile che, al momento della creazione, i file ereditino l’ACL dalla directory che li contiene. Per fare questo bisogna stabilire un’ACL di default per la directory. Facciamo un esempio: creiamo una directory chiamata acltest e impostiamo la sua ACL di default (notate l’opzione -d):

mkdir acltest ; setfacl -d -m u:tom:rw,g:games:r acltest

A questo punto, se creiamo un nuovo fi le in quella directory ed esaminiamo la sua ACL, vedremo che contiene una riga per i permessi di Tom e un per quelli del gruppo Games.In base alla mia esperienza posso dire che le ACL non sono molto usate. La maggior parte delle persone non è nemmeno ancora riuscita a immaginarsi tutti gli scenari che si possono ottenere con i permessi standard, con un attento uso dei gruppi e magari con i bit setuid e setgid.