Capitolo 5. Elenchi di controllo dell'accesso in Linux

Sommario

5.1. Autorizzazioni tradizionali per i file
5.2. Vantaggi degli ACL
5.3. Definizioni
5.4. Gestione degli ACL
5.5. Supporto ACL nelle applicazioni
5.6. Ulteriori informazioni

Estratto

Gli ACL (elenco di controllo dell'accesso) di POSIX possono essere utilizzati come un'estensione del concetto tradizionale di autorizzazione per oggetti file system. Tramite gli ACL è possibile definire le autorizzazioni in modo più flessibile rispetto al meccanismo convenzionale.

Il termine ACL POSIX indica che si tratta di uno standard POSIX (Portable Operating System Interface). Nonostante le relative proposte di standard POSIX 1003.1e e POSIX 1003.2c siano state revocate per vari motivi, gli ACL utilizzati in molti sistemi della famiglia UNIX si basano su tali proposte e l'implementazione degli ACL per file system illustrata in questo capitolo segue questi due standard. Il testo di questi standard è disponibile all'indirizzo http://wt.xpilot.org/publications/posix.1e/ (in lingua inglese).


5.1. Autorizzazioni tradizionali per i file

Le nozioni fondamentali sulle autorizzazioni tradizionali per i file Linux sono illustrate nella Sezione 3.2, "Utenti e autorizzazioni di accesso" (↑Avvio). Le funzioni più avanzate sono: setuid, setgid e sticky bit.

5.1.1. Bit setuid

In determinate situazioni, le autorizzazioni di accesso possono essere troppo restrittive. Quindi, in Linux sono disponibili impostazioni aggiuntive che consentono di eseguire una modifica temporanea dell'identità del gruppo e dell'utente attuale per una specifica azione. Ad esempio, il programma passwd in genere richiede autorizzazioni root per l'accesso a /etc/passwd. Questo file contiene alcune informazioni importanti, ad esempio le home directory degli utenti, ID utente e di gruppo. Quindi, un normale utente non è in grado di modificare passwd, poiché risulta troppo pericoloso concedere a tutti gli utenti accesso diretto a questo file. Una possibile soluzione a questo problema è il meccanismo setuid. setuid, (set user ID, ID utente impostato) è un particolare attributo di file che indica al sistema di eseguire programmi contrassegnati da un ID utente specifico. Considerare il comando passwd:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

Si noti che la s indica che il bit setuid è impostato per l'autorizzazione utente. Mediante il bit setuid, tutti gli utenti che avviano il comando passwd lo eseguono come root.

5.1.2. Bit setgid

Il bit setuid viene applicato a tutti gli utenti. Tuttavia, esiste anche una caratteristica equivalente per i gruppi: il bit setgid. Un programma per cui è stato impostato questo bit viene eseguito con l'ID gruppo con cui è stato salvato, indipendentemente dall'utente che lo avvia. Quindi, in una directory con il bit setgid, tutte le sottodirectory e i file nuovi vengono assegnati al gruppo a cui la directory appartiene. Considerare la seguente directory di esempio:

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

Si noti che la s indica che il bit setgid è impostato per l'autorizzazione del gruppo. Il proprietario della directory e i membri del gruppo archive possono accedere a questa directory. Gli utenti che non sono membri di questo gruppo sono "mappati" sul gruppo rispettivo. Il gruppo ID effettivo di tutti i file scritti sarà archive. Ad esempio, un programma di backup che viene eseguito con l'ID di gruppo archive è in grado di accedere a questa directory anche senza privilegi dell'utente root.

5.1.3. Bit sticky

È disponibile anche il bit sticky. Esiste una differenza che dipende dall'appartenenza a una directory o a un programma eseguibile. Se tale bit appartiene a un programma, un file così contrassegnato viene caricato nella RAM per evitare di doverlo recuperare dal disco rigido ogni volta che viene utilizzato. Questo attributo viene utilizzato raramente, poiché i dischi rigidi moderni sono abbastanza rapidi. Se questo attributo viene assegnato a una directory, impedisce agli utenti di cancellare i file tra di loro. I tipici esempi includono le directory /tmp e /var/tmp:

drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp