ACL Linux: storia, concetti e uso pratico: differenze tra le versioni

Da GazziNet.
Vai alla navigazione Vai alla ricerca
(Aggiunto approfondimento tecnico ACL (mask, default ACL, chmod/umask, audit, restore, troubleshooting))
(Rollback modifica precedente)
Etichetta: Annulla
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 22: Riga 22:
=== Concedere permessi a un utente specifico ===
=== Concedere permessi a un utente specifico ===


<syntaxhighlight lang="bash">
<pre>
sudo setfacl -m u:deploy:rwx /srv/progetto/shared
sudo setfacl -m u:deploy:rwx /srv/progetto/shared
</syntaxhighlight>
</pre>


=== Definire ACL di default su una directory ===
=== Definire ACL di default su una directory ===
Riga 30: Riga 30:
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno.
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno.


<syntaxhighlight lang="bash">
<pre>
sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared
sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared
</syntaxhighlight>
</pre>


=== Verificare ACL effettive ===
=== Verificare ACL effettive ===


<syntaxhighlight lang="bash">
<pre>
getfacl /srv/progetto/shared
getfacl /srv/progetto/shared
</syntaxhighlight>
</pre>


Nota: la voce '''mask''' puo limitare i permessi realmente applicati.
Nota: la voce '''mask''' puo limitare i permessi realmente applicati.
Riga 72: Riga 72:
* mantenere un approccio minimo privilegio
* mantenere un approccio minimo privilegio


== 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]
== Approfondimento tecnico ACL Linux ==
== Approfondimento tecnico ACL Linux ==


Riga 98: Riga 94:
Esempio: se una entry dice <code>rwx</code> ma la mask e <code>r-x</code>, il risultato effettivo e <code>r-x</code>.
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:
<pre>
 
<syntaxhighlight lang="bash">
setfacl -m m::rwx /percorso
setfacl -m m::rwx /percorso
# oppure ricalcolo automatico durante setfacl senza -n
</pre>
</syntaxhighlight>


=== ACL access vs ACL default ===
=== ACL access vs ACL default ===
Riga 110: Riga 103:
* '''Default ACL''': template ereditato da nuovi oggetti creati dentro una directory.
* '''Default ACL''': template ereditato da nuovi oggetti creati dentro una directory.


Impostazione tipica su directory condivisa:
<pre>
 
<syntaxhighlight lang="bash">
setfacl -m u:deploy:rwx /srv/shared
setfacl -m u:deploy:rwx /srv/shared
setfacl -m d:u:deploy:rwx /srv/shared
setfacl -m d:u:deploy:rwx /srv/shared
</syntaxhighlight>
</pre>


=== Interazione con chmod e umask ===
=== Interazione con chmod e umask ===
Riga 121: Riga 112:
* <code>chmod</code> puo modificare la mask ACL, cambiando i permessi effettivi.
* <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.
* <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 ===
=== Verifica tecnica rapida ===


<syntaxhighlight lang="bash">
<pre>
# ACL estese presenti?
ls -l /percorso
ls -l /percorso   # il '+' nei permessi indica ACL estese
 
# dettaglio completo
getfacl /percorso
getfacl /percorso
# proprietario/gruppo/mode classico
stat /percorso
stat /percorso
</syntaxhighlight>
</pre>
 
=== 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 ===
=== Backup e ripristino ACL ===


Prima di cambi strutturali conviene salvare ACL:
<pre>
 
<syntaxhighlight lang="bash">
getfacl -R /srv/shared > /root/acl-backup.txt
getfacl -R /srv/shared > /root/acl-backup.txt
setfacl --restore=/root/acl-backup.txt
setfacl --restore=/root/acl-backup.txt
</syntaxhighlight>
</pre>


=== Operazioni utili avanzate ===
=== Operazioni utili avanzate ===


<syntaxhighlight lang="bash">
<pre>
# rimuove ACL estese (mantiene permessi base)
setfacl -b /percorso
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]
== Significato dei parametri usati nei comandi ==


# rimuove ACL default
=== setfacl ===
setfacl -k /directory
 
<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 ===


# modifica ricorsiva
<pre>ls -l /percorso</pre>
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.
* <code>-l</code>: formato esteso (permessi, owner, group, size, date).
: Se compare `+` nei permessi (es. `drwxr-xr-x+`) sono presenti ACL estese.


=== Filesystem e compatibilita ===
<pre>stat /percorso</pre>


Sui filesystem Linux moderni (ext4, XFS) ACL sono normalmente disponibili. In ambienti particolari verificare:
* mostra metadata dettagliati del file/directory (mode, uid/gid, inode, timestamp).
* opzioni di mount
* supporto lato filesystem remoto
* differenze con modelli ACL non POSIX (es. NFSv4 ACL)


=== Troubleshooting tipico ===
<pre>namei -om /percorso/file</pre>


Se "i permessi sembrano giusti ma non funziona":
* risolve ogni componente del path e mostra permessi/proprietari passo-passo.
1. verificare path completo (permessi su ogni directory padre)
* <code>-o</code>: mostra owner e group.
2. controllare <code>mask</code>
* <code>-m</code>: mostra i bit di permesso in stile `ls -l`.
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:
=== Promemoria rapido sui simboli permesso ===


<syntaxhighlight lang="bash">
* <code>r</code> = read
namei -om /percorso/file
* <code>w</code> = write
</syntaxhighlight>
* <code>x</code> = execute/traverse
* <code>X</code> = execute condizionale (utile nelle ricorsioni)

Versione attuale delle 11:07, 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:

  • getfacl per leggere ACL correnti
  • setfacl per 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 proprietario
  • group:: permessi del gruppo proprietario
  • other:: permessi per tutti gli altri
  • user:nome_utente: eccezioni per singolo utente
  • group:nome_gruppo: eccezioni per gruppo specifico
  • mask:: limite massimo effettivo per group e named user/group
  • default:... 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

  • chmod puo modificare la mask ACL, cambiando i permessi effettivi.
  • umask influenza 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 la mask ACL 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 = read
  • w = write
  • x = execute/traverse
  • X = execute condizionale (utile nelle ricorsioni)