ACL Linux: storia, concetti e uso pratico: differenze tra le versioni
(Fix rendering: sostituiti blocchi syntaxhighlight non supportati e ripristinato contenuto) |
(Aggiunta spiegazione parametri dei comandi ACL) |
||
| Riga 146: | Riga 146: | ||
* [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] | ||
== Significato dei parametri usati nei comandi == | |||
=== setfacl === | |||
<pre>setfacl -m u:deploy:rwx /srv/progetto/shared</pre> | |||
* <code>-m</code>: modifica (add/update) una ACL entry. | |||
* <code>u:deploy:rwx</code>: entry ACL per utente `deploy` con permessi `rwx`. | |||
: `u` = user, `deploy` = utente, `rwx` = read/write/execute. | |||
* <code>/srv/progetto/shared</code>: path target. | |||
<pre>setfacl -m d:u:deploy:rwx /srv/progetto/shared</pre> | |||
* <code>d:</code>: ACL di default (ereditaria, valida su directory). | |||
* <code>u:deploy:rwx</code>: come sopra, ma applicata ai nuovi file/cartelle creati dentro la directory. | |||
<pre>setfacl -m m::rwx /percorso</pre> | |||
* <code>m::rwx</code>: imposta la <code>mask</code> ACL a `rwx`. | |||
: La mask limita i permessi effettivi di group e named user/group. | |||
<pre>setfacl -R -m u:deploy:rwX /srv/shared</pre> | |||
* <code>-R</code>: applicazione ricorsiva su tutto l'albero. | |||
* <code>rwX</code>: `r` read, `w` write, `X` execute solo su directory (e su file che hanno gia execute). | |||
<pre>setfacl -b /percorso</pre> | |||
* <code>-b</code>: rimuove ACL estese, mantenendo i permessi base Unix. | |||
<pre>setfacl -k /directory</pre> | |||
* <code>-k</code>: rimuove solo le ACL di default dalla directory. | |||
<pre>setfacl --restore=/root/acl-backup.txt</pre> | |||
* <code>--restore=FILE</code>: ripristina ACL da backup creato con `getfacl -R`. | |||
=== getfacl === | |||
<pre>getfacl /srv/progetto/shared</pre> | |||
* stampa ACL (access e default) del path. | |||
<pre>getfacl -R /srv/shared > /root/acl-backup.txt</pre> | |||
* <code>-R</code>: output ricorsivo. | |||
* <code>></code>: redirect su file per backup. | |||
=== ls / stat / namei === | |||
<pre>ls -l /percorso</pre> | |||
* <code>-l</code>: formato esteso (permessi, owner, group, size, date). | |||
: Se compare `+` nei permessi (es. `drwxr-xr-x+`) sono presenti ACL estese. | |||
<pre>stat /percorso</pre> | |||
* mostra metadata dettagliati del file/directory (mode, uid/gid, inode, timestamp). | |||
<pre>namei -om /percorso/file</pre> | |||
* risolve ogni componente del path e mostra permessi/proprietari passo-passo. | |||
* <code>-o</code>: mostra owner e group. | |||
* <code>-m</code>: mostra i bit di permesso in stile `ls -l`. | |||
=== Promemoria rapido sui simboli permesso === | |||
* <code>r</code> = read | |||
* <code>w</code> = write | |||
* <code>x</code> = execute/traverse | |||
* <code>X</code> = execute condizionale (utile nelle ricorsioni) | |||
Versione delle 10:50, 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
Fonti
Significato dei parametri usati nei comandi
setfacl
setfacl -m u:deploy:rwx /srv/progetto/shared
-m: modifica (add/update) una ACL entry.u:deploy:rwx: entry ACL per utente `deploy` con permessi `rwx`.
- `u` = user, `deploy` = utente, `rwx` = read/write/execute.
/srv/progetto/shared: path target.
setfacl -m d:u:deploy:rwx /srv/progetto/shared
d:: ACL di default (ereditaria, valida su directory).u:deploy:rwx: come sopra, ma applicata ai nuovi file/cartelle creati dentro la directory.
setfacl -m m::rwx /percorso
m::rwx: imposta lamaskACL a `rwx`.
- La mask limita i permessi effettivi di group e named user/group.
setfacl -R -m u:deploy:rwX /srv/shared
-R: applicazione ricorsiva su tutto l'albero.rwX: `r` read, `w` write, `X` execute solo su directory (e su file che hanno gia execute).
setfacl -b /percorso
-b: rimuove ACL estese, mantenendo i permessi base Unix.
setfacl -k /directory
-k: rimuove solo le ACL di default dalla directory.
setfacl --restore=/root/acl-backup.txt
--restore=FILE: ripristina ACL da backup creato con `getfacl -R`.
getfacl
getfacl /srv/progetto/shared
- stampa ACL (access e default) del path.
getfacl -R /srv/shared > /root/acl-backup.txt
-R: output ricorsivo.>: redirect su file per backup.
ls / stat / namei
ls -l /percorso
-l: formato esteso (permessi, owner, group, size, date).
- Se compare `+` nei permessi (es. `drwxr-xr-x+`) sono presenti ACL estese.
stat /percorso
- mostra metadata dettagliati del file/directory (mode, uid/gid, inode, timestamp).
namei -om /percorso/file
- risolve ogni componente del path e mostra permessi/proprietari passo-passo.
-o: mostra owner e group.-m: mostra i bit di permesso in stile `ls -l`.
Promemoria rapido sui simboli permesso
r= readw= writex= execute/traverseX= execute condizionale (utile nelle ricorsioni)