ACL in Linux
Le liste di controllo degli accessi (ACL) estendono su Linux/Unix le autorizzazioni standard che tutti conosciamo con la possibilità di concedere autorizzazioni per utenti/gruppi specifici.
Tutte le distribuzioni recenti supportano le ACL e offrono tutto il necessario per usarli.
I filesystem come EXT3 o EXT4 in cui vuoi usare devono essere montati con l’opzione ACL aggiungendo acl alla riga delle opzioni in /etc/fstab, mentre nel caso di XFS o BTRFS le ACL sono già abilitate di default.
Ecco un esempio su come attivare le ACL su un filesystem EXT4 in maniera persistente al riavvio.
/dev/vg_root/lv_root / ext4 defaults,acl,noatime,nodiratime 1 1
Eseguendo il comando mount, puoi facilmente controllare se i tuoi filesystem sono montati con questa opzione. L’output per la partizione mostrata in precedenza è simile a questo:
/dev/vg_root/lv_root su / tipo ext4 (rw, noatime, nodiratime, acl)
Come esempio useremo Apache che sarà configurato in modo che agli utenti sia data la possibilità di avere della propria directory web. L’opzione che consente di fare ciò la directory-utente di Apache “userdir”, che di solito corrisponde a ~/public_html.
Apache non dovrebbe girare come utente root, il che è una buona cosa, tranne per il fatto che questo impone il problema che Apache per impostazione predefinita non sarà in grado di leggere le directory degli utenti, a meno che essi abbiano permessi di lettura globali, come nel set di autorizzazioni 755.
Anche questo ovviamente non è desiderabile; poiché ogni utente sarà in grado di leggere directory home di qualsiasi altro utente.
Per impostazione predefinita, i permessi della directory home hanno questo aspetto:
drwx------. 2 vale vale 62 Feb 17 15:46 vale
Solo a me è permesso lavorare lì. Se voglio abilitare Apache a leggere la mia home directory, posso specificarlo tramite una ACL.
Come detto, non voglio permessi di lettura globali. Voglio solo abilitare un utente specifico, apache, a leggere la mia directory home.
Usando setfacl posso farlo:
setfacl -mu: apache: rx /home/vale
Questo dà i permessi r (lettura) e x (esecuzione), o in caso di directory, come qui, che si trasformano in) all’utente apache.
Invece di u per gli utenti puoi anche usare g per specificare un gruppo.
Ora le autorizzazioni hanno questo aspetto:
drwx------+ 2 vale vale 62 Feb 17 15:46 vale
Puoi vedere che ora il campo di gruppo dei permessi tradizionali contiene anche i permessi r e x. Si potrebbe pensare che non sia necessario, ma in realtà lo è.
Inoltre puoi vedere che alla fine dei permessi è apparso un più. Questo segno viene usato per indicare l’uso di un ACL.
Usando getfacl possiamo visualizzare l’ACL.
getfacl /home/vale
visualizza:
# file: home/vale
# proprietario: vale
# gruppo: vale
utente :: rwx
utente: apache: rx
gruppo::---
maschera :: rx
altro::---
Ora torniamo alla necessità dei permessi r e x nel campo gruppo. Se li rimuovo, l’output di getfacl è simile a questo:
# file: vale
# proprietario: vale
# gruppo: vale
utente :: rwx
utente: apache: rx #effettivo: ---
gruppo::---
maschera::---
altro::---
È importante notare l’output aggiuntivo di #effettivo: — , che ci dice che l’utente apache non ha effettivamente i permessi. L’utilizzo del browser per accedere a http://localhost/~vale lo conferma.
Ora Apache ha i permessi necessari per leggere la mia home directory. Poiché all’interno di questo tutte le autorizzazioni sono messe per impostazione predefinita a 755, non è necessario applicare alcuna ACL a public_html. Quelli di voi che sono paranoici (o hanno una distribuzione paranoica) con tutti i permessi all’interno della loro home directory impostati su 700 o 750 devono ovviamente abilitare Apache per accedere a public_html, proprio come mostrato sopra per la home directory.
In questo tutorial abbiamo imparato come impostare le ACL (setfacl), come riconoscerne l’uso nell’output del comando ls (il segno + alla fine dei permessi) e come visualizzarle (getfacl).
La modifica degli ACL funziona esattamente allo stesso modo della loro impostazione: infatti in realtà li stiamo modificando quando li impostiamo. Il parametro -m significa modifica.
Quindi se in seguito vuoi abilitare Apache a scrivere nella tua directory home (qualunque sia la ragione per cui potresti dover farlo) devi semplicemente chiamare:
setfacl -mu: apache: rwx /home/vale
Può succedere che tu voglia sbarazzarti di una voce ACL. Forse hai deciso di non voler più usare le directory degli utenti. Anche qui usiamo setfacl, solo che questa volta usiamo:
setfacl -xu: apache /home/vale
Qui possiamo specificare un gruppo sostituendo la u con una g.
Le ACL non sono limitat a un solo utente/gruppo, ma che è possibile inserire più voci.
Ecco un esempio con gli utenti Apache e Tomcat che hanno i permessi di lettura per la home directory:
# file: vale
# proprietario: vale
# gruppo: vale
utente :: rwx
utente: apache: rx
utente: tomcat: rx
gruppo::---
maschera :: rx
altro::---
Bene, immagino che sia praticamente tutto ciò che devi sapere per poter utilizzare le ACL in Linux.