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

Da GazziNet.
Vai alla navigazione Vai alla ricerca
(Refinement formattazione articolo ACL Linux)
(Rollback modifica precedente)
Etichetta: Annulla
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
== Introduzione ==
== Introduzione ==


Le '''ACL''' (''Access Control List'') in Linux servono quando i permessi classici <code>rwx</code> per ''owner/group/others'' non bastano.
Le '''ACL''' (''Access Control List'') in Linux estendono il modello classico dei permessi Unix e consentono un controllo accessi piu granulare.


In un server con WordPress e MediaWiki, le ACL permettono di assegnare permessi mirati a utenti tecnici (es. deploy) senza aprire tutto con <code>chmod 777</code>.
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.


== Cosa sono le ACL Linux ==
== Concetti base ==


Le ACL estendono il modello Unix tradizionale con regole aggiuntive per utenti e gruppi specifici.
Nel modello standard Unix hai tre classi di permessi:
* proprietario
* gruppo
* altri


Comandi base:
Con le ACL puoi aggiungere entry dedicate, ad esempio per dare accesso a un utente tecnico senza cambiare proprietario della risorsa.
* <code>getfacl</code>: legge ACL correnti
* <code>setfacl</code>: aggiunge/modifica/rimuove ACL


== Perche sono utili su WordPress e MediaWiki ==
Comandi principali:
* <code>getfacl</code> per leggere ACL correnti
* <code>setfacl</code> per creare/modificare/rimuovere ACL


Scenario tipico: web server con utente <code>www-data</code> e uno o piu utenti operativi.
== Esempi pratici ==
Senza ACL si finisce spesso tra due estremi:
* permessi troppo stretti (operazioni bloccate)
* permessi troppo larghi (rischio sicurezza)


Con ACL si applica il principio del minimo privilegio.
=== Concedere permessi a un utente specifico ===


=== Esempio WordPress ===
<pre>
sudo setfacl -m u:deploy:rwx /srv/progetto/shared
</pre>


Consentire a <code>deploy</code> scrittura solo su uploads:
=== Definire ACL di default su una directory ===


<syntaxhighlight lang="bash">
Le ACL di default vengono ereditate da nuovi file e directory creati al suo interno.
sudo setfacl -R -m u:deploy:rwx /var/www/wordpress/wp-content/uploads
sudo setfacl -R -m d:u:deploy:rwx /var/www/wordpress/wp-content/uploads
</syntaxhighlight>


La regola <code>d:</code> imposta ACL di default per file/cartelle creati in futuro.
<pre>
sudo setfacl -m d:u:deploy:rwx /srv/progetto/shared
</pre>


=== Esempio MediaWiki ===
=== Verificare ACL effettive ===


Gestire upload in <code>images</code> con permessi mirati:
<pre>
getfacl /srv/progetto/shared
</pre>


<syntaxhighlight lang="bash">
Nota: la voce '''mask''' puo limitare i permessi realmente applicati.
sudo setfacl -R -m u:deploy:rwx /var/www/mediawiki/images
sudo setfacl -R -m d:u:deploy:rwx /var/www/mediawiki/images
</syntaxhighlight>


=== Verifica ===
== Relazione con chmod ==


<syntaxhighlight lang="bash">
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.
getfacl /var/www/wordpress/wp-content/uploads
getfacl /var/www/mediawiki/images
</syntaxhighlight>


Nota: controllare sempre la voce '''mask''', perche puo limitare i permessi effettivi.
== 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 ==
== Buone pratiche ==


* evitare <code>777</code>
* applicare ACL solo dove necessario
* applicare ACL solo dove necessario
* usare ACL di default sulle directory con contenuti dinamici
* documentare le regole nei runbook operativi
* verificare ACL durante audit periodici
* verificare periodicamente configurazioni e ereditarieta
* documentare le regole operative
* 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 ===


== Storia delle ACL: quando sono nate ==
<pre>
setfacl -b /percorso
setfacl -k /directory
setfacl -R -m u:deploy:rwX /srv/shared
</pre>


Timeline essenziale:
=== Troubleshooting tipico ===
* '''Anni 60-70''': concetti ACL in sistemi multiutente storici
* '''Anni 90''': sviluppo estensioni sicurezza IEEE POSIX 1003.1e
* '''Ottobre 1997''': riferimento tecnico nella bozza POSIX.1e Draft 17
* '''Gennaio 1998''': processo standard POSIX.1e ritirato, ma il modello ACL continua a essere usato
* '''Novembre 2002''': ACL POSIX integrate nel kernel Linux 2.5.46 (ramo di sviluppo)
* '''Dal 2003 in poi''': adozione ampia sui filesystem Linux server (ext*, XFS, altri)


In pratica, anche senza standard finale ratificato, le ACL Linux sono diventate uno strumento stabile e diffuso.
<pre>
namei -om /percorso/file
</pre>


== Fonti ==
== 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]
* [https://atc.usenix.org/legacy/events/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/index.html USENIX 2003 - POSIX ACLs on Linux]
* [https://man7.org/linux/man-pages/man5/acl.5.html man page acl(5)]
== Significato dei parametri usati nei comandi ==
* [https://lwn.net/Articles/660867/ LWN - contesto evoluzione ACL Linux]
 
=== 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)