7 Dicembre 2022

Linux ACL. Cosa sono le Linux ACL ed a cosa servono ?

Superare i limiti del filesystem Linux grazie alle Access Control List Linux standard POSIX

Linux-ACL-Access-Control-List

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 _
  • 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 accountinggruppo (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.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Facebook, Inc. detiene i diritti su Facebook®; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Questo sito non è affiliato, sponsorizzato, o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello Europeo da MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italia.

Torna in alto