File System Access Control Lists (ACL POSIX nei sistemi GNU/Linux)

In questo articolo vedremo come sia possibile integrare nel nostro GNU/Linux il sistema di gestione delle ACL POSIX. Cio' rendera' possibile gestire in maniera'  avanzata il controllo sull' accesso ai dati. Ecco  un esempio che vi aiutera' a comprendere di cosa stiamo parlando:

Se avessimo tre utenti di sistema  appartenenti allo stesso gruppo come potremmo fare leggere un file solamente ai primi due negando l'accesso al terzo? Appartenendo allo stesso gruppo sarebbe vano ogni tentativo con chmod o chown. Ecco allora che con un'acl possiamo possiamo risolvere questo problema!

Dobbiamo installare il pacchetto 'acl'. Questo e' il comando da eseguire con la distribuzione Debian o Ubuntu

apt-get install acl

Questo invece con Fedora o CentOS

yum install acl

Adesso dobbiamo rimontare il filesystem con l'opzione acl

mount / -o remount,acl

Editiamo /etc/fstab per far si che al prossimo avvio il sistema abiliti automaticamente le acl sul filesystem

/dev/sda1       /       ext3     defaults,acl       0       1

I binari che utilizzeremo per verificare/impostare le acl sono 'setfacl' e 'getfacl'. Riprendiamo l'esempio di prima e supponiamo di dover concedere la lettura di /home/utente1/file all' utente2. Essendo i tre utenti appartenenti allo stesso gruppo, per evitare che utente3 legga il file dovremo impostare su esso i permessi a 600

Eseguiamo ora "getfacl /home/utente1/file" ed analizziamo il suo output

getfacl: Removing leading '/' from absolute path names
# file: home/utente1/file
# owner: utente1
# group: users
user::rw-
group::---
other::---

Se utente2 provasse a leggere il file otterrebbe il classico messaggio di errore di "Permesso Negato"

Adesso eseguiamo

setfacl -m u:utente2:r /home/utente1/file

Nuovamente getfacl

getfacl: Removing leading '/' from absolute path names
# file: home/utente1/file
# owner: utente1
# group: users
user::rw-
user:utente2:r--
group::---
mask::r--
other::---

Come avrete notato c'e' una riga in piu'

user:utente2:r--

Che sta a significare che utente2 puo' leggere il file.

Allo stesso modo possiamo negare l'accesso ad un determinato file. Ad esempio

setfacl -m u:www-data:--- /usr/bin/perl