Questo tutorial spiega in dettaglio le liste di controllo degli accessi su Linux, a cosa servono e come gestirle.

Come amministratore di sistema, probabilmente stai passando un po’ di tempo a configurare i permessi per utenti e gruppi sul tuo sistema.

I permessi sui file sono già abbastanza utili per dare permessi di lettura, scrittura o esecuzione a directory o file.

Ma se avessimo bisogno di un modo più preciso per dare i permessi alle cartelle o ai file?

Che cosa succede se voglio dare accesso a un file a un utente specifico o a un gruppo specifico, che non è il proprietario attuale del file?

Questo è esattamente ciò che le liste di controllo degli accessi, anche abbreviate ACL, stanno risolvendo su un sistema Linux.

Nel tutorial di oggi, daremo uno sguardo molto da vicino alle liste di controllo degli accessi, cosa sono e come vengono utilizzate per configurare correttamente un sistema Linux.

Pronto?

Tabella dei contenuti

Cosa imparerai

Se seguirai questo tutorial fino alla fine, imparerai i seguenti argomenti:

  • Cosa sono le liste di controllo di accesso e come possono essere lette dal comando ls;
  • Come impostare i permessi di base su un file usando il comando setfacl:
  • Come leggere le liste di controllo d’accesso usando il comando getfacl;
  • Cos’è la maschera della lista di controllo d’accesso e come dovrebbe essere letta;
  • Cosa sono i default della lista di controllo d’accesso e come possono essere usati efficacemente

Questo è un programma piuttosto lungo, quindi senza ulteriori indugi, iniziamo con una rapida definizione di cosa sono le liste di controllo d’accesso.

Fondamenti delle liste di controllo d’accesso su Linux

Su Linux, ci sono due modi di impostare i permessi per utenti e gruppi: con i normali permessi sui file o con le liste di controllo d’accesso.

Definizione delle liste di controllo d’accesso

Le liste di controllo d’accesso sono usate sui filesystem Linux per impostare permessi personalizzati su file e cartelle. Le ACL permettono ai proprietari dei file o agli utenti privilegiati di concedere diritti a utenti specifici o a gruppi specifici.

In Linux, come probabilmente sapete, i permessi sono divisi in tre categorie: una per il proprietario del file, una per il gruppo e una per gli altri.

Tuttavia, in alcuni casi, potreste voler concedere l’accesso a una cartella (il permesso di esecuzione per esempio) a un utente specifico senza dover mettere questo utente nel gruppo del file.

Questo è esattamente il motivo per cui le liste di controllo degli accessi sono state inventate in primo luogo.

Lista di controllo degli accessi

Su Linux, le liste di controllo degli accessi non sono abilitate quando si crea un nuovo file o una nuova directory sul proprio host (tranne se una directory madre ha alcune ACL predefinite).

Per vedere se le liste di controllo degli accessi sono definite per un file o una directory, eseguite il comando ls e cercate un carattere “+” alla fine della linea di autorizzazione.

$ ls -l

Per mostrare la differenza, ecco la differenza quando si elencano i file su un’istanza minima.

Ora che hai alcune nozioni di base sulle liste di controllo degli accessi, vediamo come puoi iniziare a creare ACL di base per i tuoi file e directory.

Creare liste di controllo degli accessi su Linux

Prima di iniziare con i comandi ACL, è importante aver installato i pacchetti sul tuo host.

Verificare l’installazione dei pacchetti ACL

Potrebbe non essere il caso se hai scelto di avere un server minimale in esecuzione.

Inizia a controllare l’aiuto relativo a setfacl eseguendo il seguente comando

$ setfacl --help

Se il tuo host non trova il comando setfacl, assicurati di aver installato i pacchetti necessari per la gestione ACL.

$ sudo apt-get install acl -y

Nota che avrai bisogno dei privilegi sudo su Debian 10 per eseguire questo comando.

Esegui il comando setfacl e assicurati che questa volta sei in grado di vedere i comandi di aiuto.

Ora che il tuo host è configurato correttamente, vediamo come funziona il comando setfacl.

Impostare le liste di controllo degli accessi usando setfacl

Con le liste di controllo degli accessi, ci sono due comandi principali da ricordare: setfacl e getfacl.

In questo capitolo, daremo un’occhiata al comando setfacl, poiché quello getfacl è abbastanza auto esplicativo.

Il comando setfacl è usato su Linux per creare, modificare e rimuovere liste di controllo degli accessi su un file o una directory.

Il setfacl ha la seguente sintassi

$ setfacl {-m, -x} {u, g}:<name>: <file, directory>

dove le parentesi graffe indicano una delle seguenti opzioni e le parentesi regolari indicano uno o più elementi.

  • -m : significa che volete modificare una o più voci ACL su un file o una directory.
  • -x : significa che volete rimuovere una o più voci ACL su un file o una directory.
  • {u, g} : se volete modificare l’ACL per un utente o per un gruppo.
  • name : questo è un parametro opzionale, può essere omesso se volete impostare le voci ACL per ogni utente o per ogni gruppo sul vostro host.
  • : per impostare i permessi di lettura, scrittura o esecuzione sul file o sulla directory.

Per esempio, per impostare permessi di scrittura specifici per un utente su un file, scriverai il seguente comando

$ setfacl -m u:user:w <file, directory>

Per impostare permessi di esecuzione per tutti gli utenti sul tuo host, dovresti scrivere il seguente comando

$ setfacl -m u::x <file, directory>

Per impostare i permessi completi per un gruppo specifico sul tuo host, dovresti scrivere il setfacl in questo modo

$ setfacl -m g:group:rwx <file, directory>

Ora diciamo che vuoi rimuovere una voce ACL da un file.

Per rimuovere una voce specifica dell’utente da un file, si deve specificare l’opzione x.

Nota: non si possono rimuovere diritti specifici da una singola voce ACL, il che significa che non si possono rimuovere i permessi di scrittura, mantenendo attivi i permessi di lettura ACL.

$ setfacl -x u:<user> <file, directory>

Similmente, per rimuovere le ACL relative ai gruppi sul tuo host, dovresti scrivere il seguente comando

$ setfacl -x g:<group> <file, directory>

Ora che hai visto come puoi creare facilmente liste di controllo degli accessi su Linux, è ora di vedere come puoi controllare le liste di controllo degli accessi esistenti su file e directory.

Elenco delle liste di controllo degli accessi usando getfacl

Il comando getfacl è usato su Linux per stampare un elenco completo di tutti i permessi regolari e i permessi delle liste di controllo degli accessi su un file o directory.

Il getfacl può essere usato con la seguente sintassi

$ getfacl <file, directory>

Il comando getfacl è diviso in più categorie :

  • Nome del file, proprietario e gruppo: le informazioni sulla proprietà dell’utente e del gruppo sono mostrate in cima;
  • Permessi dell’utente: per prima cosa, si trovano i normali permessi dell’utente, chiamato anche utente proprietario, seguito da qualsiasi voce ACL specifica dell’utente (chiamata named users)
  • Permessi del gruppo: vengono presentati i gruppi proprietari seguiti da voci ACL specifiche del gruppo, chiamate anche gruppi nominati
  • Maschera: che limita i permessi dati alle voci ACL, la maschera sarà dettagliata nella prossima sezione;
  • Altri permessi: questi permessi sono sempre attivi e questa è l’ultima categoria esplorata quando nessun altro permesso corrisponde all’utente o gruppo corrente.

Lavorare con la maschera delle liste di controllo degli accessi

Come avrete probabilmente visto dall’ultimo screenshot, c’è una voce di maschera tra i gruppi nominati e gli altri permessi.

Ma a cosa serve questa maschera?

La maschera ACL è diversa dalla maschera di creazione dei file (umask) ed è usata per limitare le voci ACL esistenti su un file o una directory.

La maschera ACL è usata come l’insieme massimo di permessi ACL indipendentemente dai permessi esistenti che superano la maschera ACL.

Come sempre, un diagramma parla più di cento parole.

La maschera ACL viene aggiornata ogni volta che si esegue un comando setfacl, a meno che non si specifichi che non si vuole aggiornare la maschera con il flag -n.

Per evitare che la maschera venga aggiornata, esegui il setfacl con il seguente comando

$ setfacl -n -m u:antoine:rwx <file, directory>

Come puoi vedere in questo esempio, ho impostato l’utente “antoine” per avere pieni permessi sul file.

La maschera è impostata per limitare i permessi a quelli di lettura e scrittura.

Di conseguenza, i “permessi effettivi” impostati su questo file per questo utente sono quelli di lettura e scrittura, il permesso di esecuzione non è concesso.

Nota: se il tuo set massimo di permessi differisce dalla voce della maschera, ti verrà presentata una riga effettiva che calcola il set “reale” di voci ACL utilizzate.

Creazione di liste di controllo di accesso predefinite sulle directory

Come già menzionato in questo articolo, è possibile creare voci ACL sulle directory e funzionano allo stesso modo delle liste di controllo di accesso ai file.

Tuttavia, c’è una piccola differenza quando si tratta di directory: si ha la possibilità di creare liste di controllo degli accessi predefinite.

Le liste di controllo degli accessi predefinite sono usate per creare voci ACL su una directory che saranno ereditate dagli oggetti in questa directory come file o sottodirectory.

Quando si creano voci ACL predefinite:

  • I file creati in questa directory ereditano le voci ACL specificate nella directory padre
  • Le sottodirectory create in questa directory ereditano le voci ACL così come le voci ACL di default dalla directory padre.

Per creare voci ACL di default, specificate l’opzione -d quando impostate ACL usando il comando setfacl.

$ setfacl -d -m {u, g}:<name>: <directory>

Per esempio, per assegnare i permessi di lettura a tutti i file creati in una directory, dovresti eseguire il seguente comando

$ setfacl -d -m u::r directory

Ora, quando un file viene creato in questa directory acl, puoi vedere che le voci ACL predefinite sono applicate al file.

Similmente, quando una directory viene creata nella acl-directory, erediterà le voci ACL predefinite specificate nella directory madre.

Nota che si raccomanda di specificare permessi predefiniti per tutte e tre le categorie (utente, gruppo e altro).

Infatti, specificare una delle tre voci creerà le due rimanenti con i permessi relativi alla maschera di creazione del file.

Eliminare le liste di controllo di accesso predefinite sulle directory

Per eliminare le liste di controllo di accesso predefinite esistenti sulle directory, utilizzare il flag -k con il comando setfacl.

$ setfacl -k <directory>

Dato l’esempio che abbiamo specificato prima, ecco come cancellare le voci predefinite

$ setfacl -k acl-directory

Nota che cancellare le voci ACL dalla directory madre non cancella le voci ACL nei file o nelle directory contenute nella directory madre.

Per rimuovere le voci ACL predefinite in una directory e in tutte le sottodirectory, dovresti usare un’opzione ricorsiva (-R)

$ setfacl -kR <directory>

Conclusione

In questo tutorial, hai imparato le liste di controllo degli accessi su Linux, il comando getfacl e setfacl.

Hai imparato di più sulla maschera delle liste di controllo degli accessi e su come le ACL predefinite sono usate per creare voci ACL su file e sottodirectory contenute nella directory madre.

Se sei curioso di conoscere l’amministrazione del sistema Linux, abbiamo molti altri tutorial sull’argomento, assicurati di leggerli!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.