|
|
| Riga 1: |
Riga 1: |
| == Introduzione ==
| | null |
|
| |
|
| Le '''ACL''' (''Access Control List'') in Linux estendono il modello classico dei permessi Unix e consentono un controllo accessi piu granulare.
| | == Verifiche rapide == |
|
| |
|
| 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.
| | La checklist operativa e stata spostata in una pagina dedicata: |
| | | * [[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)
| |