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

Da GazziNet.
Vai alla navigazione Vai alla ricerca
(Aggiornata pagina originale con rimando a Verifiche rapide)
Etichette: Sostituito Annullato
(Rollback modifica precedente)
Etichetta: Annulla
 
Riga 1: Riga 1:
null
== Introduzione ==


== Verifiche rapide ==
Le '''ACL''' (''Access Control List'') in Linux estendono il modello classico dei permessi Unix e consentono un controllo accessi piu granulare.


La checklist operativa e stata spostata in una pagina dedicata:
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.
* [[TIPS Linux - Verifiche rapide]]
 
== 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]
== 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 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)