ACL Linux: storia, concetti e uso pratico: differenze tra le versioni
(Compatibilita wiki: sostituiti syntaxhighlight con blocchi pre) Etichetta: Sostituito |
(Fix rendering: sostituiti blocchi syntaxhighlight non supportati e ripristinato contenuto) |
||
| Riga 1: | Riga 1: | ||
== Introduzione == | |||
Le '''ACL''' (''Access Control List'') in Linux estendono il modello classico dei permessi Unix e consentono un controllo accessi piu granulare. | |||
Quando owner, group e others non bastano, le ACL permettono di assegnare regole specifiche a singoli utenti o gruppi mantenendo il principio del minimo privilegio. | |||
== Concetti base == | |||
Nel modello standard Unix hai tre classi di permessi: | |||
* proprietario | |||
* gruppo | |||
* altri | |||
Con le ACL puoi aggiungere entry dedicate, ad esempio per dare accesso a un utente tecnico senza cambiare proprietario della risorsa. | |||
Comandi principali: | |||
* <code>getfacl</code> per leggere ACL correnti | |||
* <code>setfacl</code> per creare/modificare/rimuovere ACL | |||
== Esempi pratici == | |||
=== Concedere permessi a un utente specifico === | |||
<pre> | |||
sudo setfacl -m u:deploy:rwx /srv/progetto/shared | |||
</pre> | |||
=== Definire ACL di default su una directory === | |||
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno. | |||
<pre> | |||
sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared | |||
</pre> | |||
=== Verificare ACL effettive === | |||
<pre> | |||
getfacl /srv/progetto/shared | |||
</pre> | |||
Nota: la voce '''mask''' puo limitare i permessi realmente applicati. | |||
== Relazione con chmod == | |||
ACL e permessi tradizionali convivono. Dopo modifiche con <code>chmod</code>, e buona pratica controllare sempre il risultato con <code>getfacl</code> per verificare eventuali effetti sulla maschera ACL. | |||
== Quando usare le ACL == | |||
* ambienti multiutente | |||
* directory condivise con esigenze di accesso diverse | |||
* casi in cui si vogliono evitare permessi eccessivamente ampi (es. <code>777</code>) | |||
* sistemi in cui serve tracciare policy accessi piu rigorose | |||
== Storia delle ACL == | |||
Timeline essenziale: | |||
* '''Anni 60-70''': concetti ACL gia presenti in sistemi multiutente storici | |||
* '''Anni 90''': sviluppo delle estensioni sicurezza IEEE POSIX 1003.1e | |||
* '''Ottobre 1997''': riferimento tecnico nella bozza POSIX.1e Draft 17 | |||
* '''Gennaio 1998''': standardizzazione POSIX.1e ritirata; il modello ACL continua comunque a essere implementato | |||
* '''Novembre 2002''': supporto ACL POSIX incluso nel kernel Linux 2.5.46 (ramo di sviluppo) | |||
* '''Dal 2003 in poi''': adozione ampia nei filesystem Linux usati in produzione | |||
In sintesi, pur senza standard finale ratificato, le ACL sono diventate uno strumento consolidato nell'amministrazione Linux. | |||
== Buone pratiche == | |||
* applicare ACL solo dove necessario | |||
* documentare le regole nei runbook operativi | |||
* verificare periodicamente configurazioni e ereditarieta | |||
* mantenere un approccio minimo privilegio | |||
== Approfondimento tecnico ACL Linux == | |||
=== Modello ACL POSIX: entry principali === | |||
Le ACL POSIX su file/directory usano tipicamente queste entry: | |||
* <code>user::</code> permessi del proprietario | |||
* <code>group::</code> permessi del gruppo proprietario | |||
* <code>other::</code> permessi per tutti gli altri | |||
* <code>user:nome_utente:</code> eccezioni per singolo utente | |||
* <code>group:nome_gruppo:</code> eccezioni per gruppo specifico | |||
* <code>mask::</code> limite massimo effettivo per group e named user/group | |||
* <code>default:...</code> ACL ereditarie (solo su directory) | |||
=== Mask: il punto piu importante da capire === | |||
La <code>mask</code> limita i permessi effettivi di: | |||
* <code>group::</code> | |||
* tutte le entry <code>user:...</code> nominate | |||
* tutte le entry <code>group:...</code> nominate | |||
Esempio: se una entry dice <code>rwx</code> ma la mask e <code>r-x</code>, il risultato effettivo e <code>r-x</code>. | |||
<pre> | |||
setfacl -m m::rwx /percorso | |||
</pre> | |||
=== ACL access vs ACL default === | |||
* '''Access ACL''': controlla accesso attuale al file/directory. | |||
* '''Default ACL''': template ereditato da nuovi oggetti creati dentro una directory. | |||
<pre> | |||
setfacl -m u:deploy:rwx /srv/shared | |||
setfacl -m d:u:deploy:rwx /srv/shared | |||
</pre> | |||
=== Interazione con chmod e umask === | |||
* <code>chmod</code> puo modificare la mask ACL, cambiando i permessi effettivi. | |||
* <code>umask</code> influenza i permessi iniziali alla creazione; se esiste una default ACL, quest'ultima partecipa al risultato finale. | |||
=== Verifica tecnica rapida === | |||
<pre> | |||
ls -l /percorso | |||
getfacl /percorso | |||
stat /percorso | |||
</pre> | |||
=== Backup e ripristino ACL === | |||
<pre> | |||
getfacl -R /srv/shared > /root/acl-backup.txt | |||
setfacl --restore=/root/acl-backup.txt | |||
</pre> | |||
=== Operazioni utili avanzate === | |||
<pre> | |||
setfacl -b /percorso | |||
setfacl -k /directory | |||
setfacl -R -m u:deploy:rwX /srv/shared | |||
</pre> | |||
=== Troubleshooting tipico === | |||
<pre> | |||
namei -om /percorso/file | |||
</pre> | |||
== Fonti == | |||
* [https://man7.org/linux/man-pages/man5/acl.5.html man page acl(5)] | |||
* [https://atc.usenix.org/legacy/events/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/index.html USENIX 2003 - POSIX ACLs on Linux] | |||
Versione delle 10:33, 20 mar 2026
Introduzione
Le ACL (Access Control List) in Linux estendono il modello classico dei permessi Unix e consentono un controllo accessi piu granulare.
Quando owner, group e others non bastano, le ACL permettono di assegnare regole specifiche a singoli utenti o gruppi mantenendo il principio del minimo privilegio.
Concetti base
Nel modello standard Unix hai tre classi di permessi:
- proprietario
- gruppo
- altri
Con le ACL puoi aggiungere entry dedicate, ad esempio per dare accesso a un utente tecnico senza cambiare proprietario della risorsa.
Comandi principali:
getfaclper leggere ACL correntisetfaclper creare/modificare/rimuovere ACL
Esempi pratici
Concedere permessi a un utente specifico
sudo setfacl -m u:deploy:rwx /srv/progetto/shared
Definire ACL di default su una directory
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno.
sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared
Verificare ACL effettive
getfacl /srv/progetto/shared
Nota: la voce mask puo limitare i permessi realmente applicati.
Relazione con chmod
ACL e permessi tradizionali convivono. Dopo modifiche con chmod, e buona pratica controllare sempre il risultato con getfacl per verificare eventuali effetti sulla maschera ACL.
Quando usare le ACL
- ambienti multiutente
- directory condivise con esigenze di accesso diverse
- casi in cui si vogliono evitare permessi eccessivamente ampi (es.
777) - sistemi in cui serve tracciare policy accessi piu rigorose
Storia delle ACL
Timeline essenziale:
- Anni 60-70: concetti ACL gia presenti in sistemi multiutente storici
- Anni 90: sviluppo delle estensioni sicurezza IEEE POSIX 1003.1e
- Ottobre 1997: riferimento tecnico nella bozza POSIX.1e Draft 17
- Gennaio 1998: standardizzazione POSIX.1e ritirata; il modello ACL continua comunque a essere implementato
- Novembre 2002: supporto ACL POSIX incluso nel kernel Linux 2.5.46 (ramo di sviluppo)
- Dal 2003 in poi: adozione ampia nei filesystem Linux usati in produzione
In sintesi, pur senza standard finale ratificato, le ACL sono diventate uno strumento consolidato nell'amministrazione Linux.
Buone pratiche
- applicare ACL solo dove necessario
- documentare le regole nei runbook operativi
- verificare periodicamente configurazioni e ereditarieta
- mantenere un approccio minimo privilegio
Approfondimento tecnico ACL Linux
Modello ACL POSIX: entry principali
Le ACL POSIX su file/directory usano tipicamente queste entry:
user::permessi del proprietariogroup::permessi del gruppo proprietarioother::permessi per tutti gli altriuser:nome_utente:eccezioni per singolo utentegroup:nome_gruppo:eccezioni per gruppo specificomask::limite massimo effettivo per group e named user/groupdefault:...ACL ereditarie (solo su directory)
Mask: il punto piu importante da capire
La mask limita i permessi effettivi di:
group::- tutte le entry
user:...nominate - tutte le entry
group:...nominate
Esempio: se una entry dice rwx ma la mask e r-x, il risultato effettivo e r-x.
setfacl -m m::rwx /percorso
ACL access vs ACL default
- Access ACL: controlla accesso attuale al file/directory.
- Default ACL: template ereditato da nuovi oggetti creati dentro una directory.
setfacl -m u:deploy:rwx /srv/shared setfacl -m d:u:deploy:rwx /srv/shared
Interazione con chmod e umask
chmodpuo modificare la mask ACL, cambiando i permessi effettivi.umaskinfluenza i permessi iniziali alla creazione; se esiste una default ACL, quest'ultima partecipa al risultato finale.
Verifica tecnica rapida
ls -l /percorso getfacl /percorso stat /percorso
Backup e ripristino ACL
getfacl -R /srv/shared > /root/acl-backup.txt setfacl --restore=/root/acl-backup.txt
Operazioni utili avanzate
setfacl -b /percorso setfacl -k /directory setfacl -R -m u:deploy:rwX /srv/shared
Troubleshooting tipico
namei -om /percorso/file