Indice dei contenuti dell'articolo:
Gli elenchi di controllo degli accessi di Linux, noti come ACL (Access Control List), rappresentano uno strumento fondamentale per ottenere un controllo più dettagliato e granulare delle autorizzazioni all’interno del file system Linux. Nonostante possano sembrare complessi all’inizio, le ACL sono indispensabili per gestire in modo efficace le autorizzazioni, specialmente in un ambiente aziendale moderno dove è cruciale determinare chi può accedere a specifiche informazioni.
In passato, l’accesso ai file system Linux era gestito attraverso un sistema di permessi più generale e meno specifico. Tuttavia, con l’evoluzione delle esigenze aziendali, è diventato sempre più importante avere un controllo più fine e personalizzato degli accessi. Le ACL, estensione della gestione tradizionale dei permessi in Unix, rispondono a questa esigenza.
È importante notare che il termine “ACL” può assumere significati diversi a seconda del contesto. Mentre in Linux si riferisce specificamente alla gestione dei permessi del file system, in altri ambiti, come nella gestione dell’accesso a servizi HTTP, indica il controllo dell’accesso a specifici servizi o risorse. Nonostante l’acronimo rimanga lo stesso, il suo significato varia in base al contesto di utilizzo.
Dal punto di vista storico, POSIX ha proposto alcune bozze (POSIX 1003.1e e POSIX 1003.2c) per estendere la gestione dei permessi nei sistemi Unix, ma queste non sono state completate. Tuttavia, molte di queste estensioni sono state pubblicate e adottate da diversi sistemi Unix, inclusi i sistemi GNU/Linux. Le estensioni denominate “ACL”, o “ACL POSIX” in alcuni contesti, rappresentano solo una parte di queste proposte e sono particolarmente rilevanti per la gestione dei permessi nei sistemi GNU/Linux. Questo capitolo si concentra proprio sulla descrizione e sull’implementazione delle ACL in tali sistemi.
Rivedere le basi dei permessi su Linux
Il filesystem di Linux ci offre tre tipi di permessi. Ecco una recensione semplificata:
- U ser (o proprietario dell’utente)
- G ruppo (o gruppo proprietario)
- Altri (tutti gli altri)
Con queste autorizzazioni, possiamo concedere tre (in realtà cinque, ma ci arriveremo tra un minuto) tipi di accesso:
- Read _
- Write _
- e X ecute
Questi livelli di accesso sono spesso adeguati in molti casi. Supponi di avere una directory in cui risiedono i file del reparto contabilità. Puoi impostare queste autorizzazioni su:
drwxrwxr-x 2 accounting accounting 12 Jan 8 15:13
L’utente del servizio di contabilità (il proprietario dell’utente) può leggere e scrivere nella directory e i membri del accounting
gruppo (o gruppo proprietario) possono leggere e scrivere. Altri (utenti non nel reparto contabilità) possono, tuttavia, vedere ed eseguire ciò che c’è dentro, cosa che alcuni potrebbero pensare sia una cattiva idea.
Quindi, potremmo cambiare le autorizzazioni in questo:
drwxrwx--- 2 accounting accounting 12 Jan 8 15:13 .
In questo modo gli altri utenti che non sono proprietari della cartella, ne appratenti al gruppo potranno fare nulla, in quanto non è specificato nessun permesso read, write od execute.
Abilitare il supporto ACL su Linux
Per abilitare il supporto per gli elenchi di controllo degli accessi (ACL) su Linux, è richiesto un intervento specifico sulla configurazione del file system attraverso il file /etc/fstab
. Questo file, situato nel percorso /etc/fstab
, gioca un ruolo cruciale nella gestione dei sistemi Linux, in quanto definisce come i dischi rigidi o le partizioni devono essere automaticamente montati dal sistema operativo all’avvio e quali opzioni di montaggio devono essere applicate.
Il file /etc/fstab
contiene una serie di voci, ciascuna rappresentante un dispositivo di storage o una partizione, e specifica come questi devono essere integrati nel file system globale. Queste voci includono dettagli come l’identificatore unico del dispositivo, il punto di montaggio nel file system (cioè la posizione in cui il contenuto del dispositivo sarà accessibile), il tipo di file system (come ext4, xfs, btrfs, ecc.) e una serie di opzioni di montaggio.
Per abilitare le ACL, è essenziale aggiungere l’opzione acl
alle voci pertinenti nel file /etc/fstab
. Questa aggiunta indica al sistema che, al momento del montaggio del file system o della partizione specificata, deve essere abilitato il supporto per le ACL. Senza questa specifica, le ACL non potrebbero essere applicate o gestite correttamente su quel particolare file system o partizione, limitando così la capacità di amministrazione dettagliata delle autorizzazioni dei file.
Esempio di Configurazione fstab con ACL Abilitate
Ecco un esempio di come potrebbe apparire una voce nel file fstab
con le ACL abilitate:
UUID=1234abcd-12ab-34cd-56ef-1234567890ab /example ext4 defaults,acl 0 2
In questo esempio, si monta una partizione con UUID 1234abcd-12ab-34cd-56ef-1234567890ab
nel punto di montaggio /example
con il file system ext4
. L’opzione defaults
applica una serie di opzioni di montaggio predefinite, mentre acl
abilita esplicitamente il supporto per le ACL.
Considerazioni sui Diversi File System
È importante notare che, mentre i file system come ext3
ed ext4
richiedono l’abilitazione esplicita delle ACL tramite fstab
, altri file system moderni come XFS
o Btrfs
hanno il supporto ACL abilitato per impostazione predefinita. Ciò significa che per questi ultimi file system non è necessario modificare il file fstab
per abilitare le ACL, a meno che non si vogliano modificare le impostazioni predefinite.
Se ti stai chiedendo quale sia il Filesystem più adatto alle tue esigenze leggi pure il nostro articolo in merito : Guida ai Filesystem per Linux
Visualizzazione dell’ACL corrente
Immaginiamo uno scenario in cui abbiamo uno stagista contabile di nome Kenny, che necessita di accedere a determinati file, magari quelli di Fred, il suo manager. Oppure, consideriamo una situazione in cui il reparto vendite ha bisogno di accedere ai file contabili di proprietà di Fred per creare fatture destinate al team di Fred, con lo scopo di fatturare i clienti. Tuttavia, non vogliamo che il team di vendite abbia accesso ad altri report generati dal team di Fred. Queste situazioni rappresentano una sfida in termini di gestione delle autorizzazioni: in un sistema di autorizzazioni standard, ogni file e directory può avere un solo proprietario e un gruppo di utenti associati. È in queste circostanze che le Linux Access Control Lists (ACL) diventano particolarmente utili.
Le ACL ci permettono di assegnare un set di autorizzazioni più dettagliato e specifico a un file o una directory, senza necessariamente dover modificare le autorizzazioni e la proprietà di base. In pratica, ci offrono la possibilità di “aggiungere” accessi per altri utenti o gruppi, oltre a quelli già esistenti.
Per visualizzare l’ACL corrente di un file o una directory, utilizziamo il comando getfacl
. Ad esempio:
[root]# getfacl /accounting getfacl: Removing leading '/' from absolute path names # file: accounting # owner: accounting # group: accounting user::rwx group::rwx other::---
In questo esempio, possiamo osservare che al momento non ci sono ACL aggiuntive in questa directory, poiché le uniche autorizzazioni elencate sono quelle standard per l’utente, il gruppo e altri. In questo caso specifico, è normale aspettarsi questa situazione, soprattutto se la directory è stata appena creata in un ambiente di test e non sono state effettuate altre operazioni oltre all’assegnazione della proprietà.
Quindi, iniziamo aggiungendo un ACL predefinito.
Impostazione di un ACL su Linux
La configurazione delle ACL (Access Control Lists) in Linux fornisce una flessibilità significativa nella gestione delle autorizzazioni dei file. La sintassi per impostare un ACL è strutturata come segue:
setfacl [opzione] [azione/specifica] file
L’opzione “azione” può essere -m
(modifica) o -x
(rimuovi), e la specifica indica l’utente o il gruppo seguito dai permessi che si desidera impostare. Per esempio, per impostare un ACL predefinito su una directory, utilizziamo l’opzione -d
(default). Il comando seguente imposta l’ACL predefinito sulla directory /accounting
:
[root]# setfacl -d -m accounting:rwx /accounting
Dopo aver eseguito questo comando, possiamo visualizzare le ACL predefinite per quella directory con:
[root]# getfacl /accounting # output: # file: accounting # owner: accounting # group: accounting user::rwx group::rwx other::--- default:user::rwx default:user:accounting:rwx default:group::rwx default:mask::rwx default:other::---
Scenari di Utilizzo delle ACL
La sintassi per impostare un ACL su Linux è generalmente strutturata come segue:
setfacl [opzione] [azione/specifica] file
L’“azione” può essere -m
(modifica) o -x
(rimozione). La “specifica” si riferisce all’utente o al gruppo seguito dai permessi che si desidera impostare. In questo esempio, utilizzeremo l’opzione -d
(default). Per impostare l’ACL predefinito per una directory, si eseguirà il comando:
[root]# setfacl -d -m user:accounting:rwx /accounting
Dopo aver eseguito questo comando, possiamo verificare le ACL predefinite per quella directory:
[root]# getfacl /accounting [root]# getfacl: Removing leading '/' from absolute path names # file: accounting # owner: accounting # group: accounting user::rwx group::rwx other::--- default:user::rwx default:user:accounting:rwx default:group::rwx default:mask::rwx default:other::---
Supponiamo ora che Fred crei un file in quella directory:
[fred]$ touch test [fred]$ ls -la total 0 drwxrwx---+ 2 accounting accounting 18 Jan 8 17:51 . dr-xr-xr-x. 18 root root 262 Jan 8 15:13 .. -rw-rw----+ 1 fred accounting 0 Jan 8 17:51 test [fred]$ getfacl test # file: test # owner: fred # group: accounting user::rw- user:accounting:rwx #effective:rw- group::rwx #effective:rw-
Se invece Kenny prova a creare un file, visto che non fa parte del gruppo accounting
, non ne avrà il permesso. Tuttavia, vogliamo che Kenny abbia un’esperienza lavorativa positiva, quindi gli concediamo l’accesso alla directory accounting
e gli permettiamo di creare nuovi file:
[root@lab1 accounting]# setfacl -m user:kenny:rwx /accounting [root]# getfacl . # file: . # owner: accounting # group: accounting user::rwx user:kenny:rwx
Se però non vogliamo che Kenny crei file nella directory accounting
, ma solo che legga i file presenti e crei nuovi file nella sua cartella personale, possiamo impostare i suoi permessi in questo modo:
[root@lab1 accounting]# setfacl -m user:kenny:r-x /accounting [root]# getfacl . # file: . # owner: accounting # group: accounting user::rwx user:kenny:r-x
Creiamo quindi una cartella personale per Kenny, gli assegniamo la proprietà e rendiamo il gruppo accounting
proprietario del gruppo, così che gli altri membri del gruppo possano vedere cosa contiene:
[root@lab1 accounting]# mkdir ./kenny [root]# chown kenny:accounting ./kenny [root]# getfacl ./kenny # file: kenny # owner: kenny # group: accounting user::rwx group::rwx
Ora Kenny può vedere la directory accounting
, ma può creare file solo nella sua cartella:
[root@lab1 accounting]# su kenny [kenny]$ touch test touch: cannot touch ‘test’: Permission denied [kenny]$ cd ./kenny [kenny]$ touch test [kenny]$ ls test
Se diamo a Kenny una promozione a capo revisore e vogliamo che il suo lavoro rimanga confidenziale, possiamo limitare l’accesso a Fred:
[root]# setfacl -m user:fred:- ./kenny [root]# getfacl ./kenny # file: kenny # owner: kenny # group: accounting user::rwx user:accounting:--- user:fred:---
E se non vogliamo che nessuno, tranne Kenny, possa vedere i suoi lavori?
[root]# setfacl -m group:accounting:- ./kenny [root]# getfacl ./kenny # file: kenny # owner: kenny # group: accounting user::rwx group:accounting:---
Conclusione: Comprendere e Applicare le ACL su Linux
Considerando la loro complessità e versatilità, è fortemente consigliato dedicare tempo alla lettura e comprensione delle pagine del manuale (man pages
) per setfacl
e getfacl
. Queste pagine offrono una guida completa e dettagliata su come utilizzare questi strumenti, comprese le varie opzioni e flag disponibili, fornendo esempi pratici e spiegazioni approfondite.
Oltre alle funzionalità di base, setfacl
e getfacl
offrono una serie di opzioni avanzate che possono essere estremamente utili in scenari specifici. Per esempio, è possibile configurare ACL predefiniti per le nuove directory e file in una directory, o gestire le maschere ACL che influenzano i permessi effettivi.
Sperimentare in un Ambiente Controllato
Per capire appieno il funzionamento delle ACL, è consigliabile sperimentare in un ambiente di test sicuro. Creare scenari diversi, come la gestione di permessi per diversi utenti e gruppi, può aiutare a visualizzare come le ACL influenzino l’accesso ai file e alle directory. Questo tipo di pratica è fondamentale per sviluppare un’intuizione solida su come e quando utilizzare le ACL in contesti reali.
Applicazioni Pratiche
le ACL possono essere particolarmente utili in ambienti multiutente, come i server aziendali, dove diversi reparti o team necessitano di accessi specifici a determinati file. Sono anche essenziali per la sicurezza dei dati, permettendo di restringere l’accesso a informazioni sensibili e garantendo che solo gli utenti autorizzati possano modificare o visualizzare determinati file.
Tenere in Considerazione le Best Practices
Quando si lavora con le ACL, è importante seguire le best practices, come assicurarsi di non concedere eccessivi permessi che potrebbero compromettere la sicurezza del sistema. È anche fondamentale tenere traccia delle modifiche apportate, specialmente in ambienti di produzione, per prevenire eventuali problemi di accesso o di sicurezza.
Conclusione
In conclusione, mentre le ACL possono inizialmente sembrare intimidatori a causa della loro complessità, una volta compresi, si rivelano uno strumento indispensabile per una gestione sofisticata e dettagliata delle autorizzazioni in Linux. Dedica tempo alla loro comprensione e pratica per sfruttarne appieno le potenzialità, rendendo il tuo sistema più sicuro, efficiente e adatto alle esigenze specifiche del tuo ambiente di lavoro.