ACL Linux: storia, concetti e uso pratico: differenze tra le versioni
(Contenuto reso generico: storia e uso ACL Linux) |
(Aggiunto approfondimento tecnico ACL (mask, default ACL, chmod/umask, audit, restore, troubleshooting)) |
||
| Riga 76: | Riga 76: | ||
* [https://man7.org/linux/man-pages/man5/acl.5.html man page acl(5)] | * [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] | * [https://atc.usenix.org/legacy/events/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/index.html USENIX 2003 - POSIX ACLs on Linux] | ||
== 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>. | |||
Per ricreare la mask in base alle entry correnti: | |||
<syntaxhighlight lang="bash"> | |||
setfacl -m m::rwx /percorso | |||
# oppure ricalcolo automatico durante setfacl senza -n | |||
</syntaxhighlight> | |||
=== ACL access vs ACL default === | |||
* '''Access ACL''': controlla accesso attuale al file/directory. | |||
* '''Default ACL''': template ereditato da nuovi oggetti creati dentro una directory. | |||
Impostazione tipica su directory condivisa: | |||
<syntaxhighlight lang="bash"> | |||
setfacl -m u:deploy:rwx /srv/shared | |||
setfacl -m d:u:deploy:rwx /srv/shared | |||
</syntaxhighlight> | |||
=== 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. | |||
Dopo operazioni massive con <code>chmod -R</code>, e consigliato ricontrollare con <code>getfacl</code>. | |||
=== Verifica tecnica rapida === | |||
<syntaxhighlight lang="bash"> | |||
# ACL estese presenti? | |||
ls -l /percorso # il '+' nei permessi indica ACL estese | |||
# dettaglio completo | |||
getfacl /percorso | |||
# proprietario/gruppo/mode classico | |||
stat /percorso | |||
</syntaxhighlight> | |||
=== Policy operativa per directory condivise === | |||
Pattern comune in produzione: | |||
1. Proprietario applicativo stabile (es. utente servizio) | |||
2. Gruppo di lavoro dedicato | |||
3. ACL nominate solo per eccezioni reali | |||
4. Default ACL sulle sole directory che generano nuovi file | |||
5. Audit periodico e rimozione entry obsolete | |||
=== Backup e ripristino ACL === | |||
Prima di cambi strutturali conviene salvare ACL: | |||
<syntaxhighlight lang="bash"> | |||
getfacl -R /srv/shared > /root/acl-backup.txt | |||
setfacl --restore=/root/acl-backup.txt | |||
</syntaxhighlight> | |||
=== Operazioni utili avanzate === | |||
<syntaxhighlight lang="bash"> | |||
# rimuove ACL estese (mantiene permessi base) | |||
setfacl -b /percorso | |||
# rimuove ACL default | |||
setfacl -k /directory | |||
# modifica ricorsiva | |||
setfacl -R -m u:deploy:rwX /srv/shared | |||
</syntaxhighlight> | |||
Nota su <code>X</code>: assegna execute solo a directory (e file che gia avevano execute), utile per evitare execute indiscriminato sui file normali. | |||
=== Filesystem e compatibilita === | |||
Sui filesystem Linux moderni (ext4, XFS) ACL sono normalmente disponibili. In ambienti particolari verificare: | |||
* opzioni di mount | |||
* supporto lato filesystem remoto | |||
* differenze con modelli ACL non POSIX (es. NFSv4 ACL) | |||
=== Troubleshooting tipico === | |||
Se "i permessi sembrano giusti ma non funziona": | |||
1. verificare path completo (permessi su ogni directory padre) | |||
2. controllare <code>mask</code> | |||
3. confermare utente/gruppi reali del processo | |||
4. verificare SELinux/AppArmor se presenti | |||
5. testare accesso con utente reale del servizio | |||
Comando utile per path diagnostics: | |||
<syntaxhighlight lang="bash"> | |||
namei -om /percorso/file | |||
</syntaxhighlight> | |||
Versione delle 10:28, 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
<syntaxhighlight lang="bash"> sudo setfacl -m u:deploy:rwx /srv/progetto/shared </syntaxhighlight>
Definire ACL di default su una directory
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno.
<syntaxhighlight lang="bash"> sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared </syntaxhighlight>
Verificare ACL effettive
<syntaxhighlight lang="bash"> getfacl /srv/progetto/shared </syntaxhighlight>
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
Fonti
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.
Per ricreare la mask in base alle entry correnti:
<syntaxhighlight lang="bash"> setfacl -m m::rwx /percorso
- oppure ricalcolo automatico durante setfacl senza -n
</syntaxhighlight>
ACL access vs ACL default
- Access ACL: controlla accesso attuale al file/directory.
- Default ACL: template ereditato da nuovi oggetti creati dentro una directory.
Impostazione tipica su directory condivisa:
<syntaxhighlight lang="bash"> setfacl -m u:deploy:rwx /srv/shared setfacl -m d:u:deploy:rwx /srv/shared </syntaxhighlight>
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.
Dopo operazioni massive con chmod -R, e consigliato ricontrollare con getfacl.
Verifica tecnica rapida
<syntaxhighlight lang="bash">
- ACL estese presenti?
ls -l /percorso # il '+' nei permessi indica ACL estese
- dettaglio completo
getfacl /percorso
- proprietario/gruppo/mode classico
stat /percorso </syntaxhighlight>
Policy operativa per directory condivise
Pattern comune in produzione: 1. Proprietario applicativo stabile (es. utente servizio) 2. Gruppo di lavoro dedicato 3. ACL nominate solo per eccezioni reali 4. Default ACL sulle sole directory che generano nuovi file 5. Audit periodico e rimozione entry obsolete
Backup e ripristino ACL
Prima di cambi strutturali conviene salvare ACL:
<syntaxhighlight lang="bash"> getfacl -R /srv/shared > /root/acl-backup.txt setfacl --restore=/root/acl-backup.txt </syntaxhighlight>
Operazioni utili avanzate
<syntaxhighlight lang="bash">
- rimuove ACL estese (mantiene permessi base)
setfacl -b /percorso
- rimuove ACL default
setfacl -k /directory
- modifica ricorsiva
setfacl -R -m u:deploy:rwX /srv/shared </syntaxhighlight>
Nota su X: assegna execute solo a directory (e file che gia avevano execute), utile per evitare execute indiscriminato sui file normali.
Filesystem e compatibilita
Sui filesystem Linux moderni (ext4, XFS) ACL sono normalmente disponibili. In ambienti particolari verificare:
- opzioni di mount
- supporto lato filesystem remoto
- differenze con modelli ACL non POSIX (es. NFSv4 ACL)
Troubleshooting tipico
Se "i permessi sembrano giusti ma non funziona":
1. verificare path completo (permessi su ogni directory padre)
2. controllare mask
3. confermare utente/gruppi reali del processo
4. verificare SELinux/AppArmor se presenti
5. testare accesso con utente reale del servizio
Comando utile per path diagnostics:
<syntaxhighlight lang="bash"> namei -om /percorso/file </syntaxhighlight>