Ricerca nel sito web

In che modo le maschere ACL ti consentono di ottimizzare i permessi dei file in Linux


Le maschere ACL ti consentono di impostare le autorizzazioni massime consentite per un file su Linux. Scopri cosa significano e perché sono così essenziali.

Punti chiave

  • Le maschere ACL (Access Control List) garantiscono la compatibilità con i programmi che non sono in grado di riconoscere ACL, traducendo le voci ACL in autorizzazioni POSIX.
  • Le maschere ACL rappresentano le autorizzazioni massime consentite per qualsiasi oggetto utente o gruppo che non sia l'utente, il gruppo o l'"altra" classe proprietaria.
  • Quando si aggiungono nuove voci ACL, la maschera si adatta automaticamente per riflettere le autorizzazioni massime consentite per tutti gli utenti o gruppi denominati.

Utilizzi le liste di controllo degli accessi (ACL) ma sei confuso sul concetto di maschera? Non sei solo. Immergiamoci in questo importante concetto dando un'occhiata a cosa sono e come interagiscono con i permessi del file system Linux.

Cosa sono le maschere ACL?

Le maschere ACL sono un modo per garantire l'interoperabilità delle autorizzazioni con programmi e utilità che non riconoscono ACL.

Una maschera ACL su un file o una directory equivale alle massime autorizzazioni consentite a qualsiasi oggetto utente o gruppo che non sia l'utente, il gruppo o l'"altra" classe proprietaria dell'utente/gruppo/altra classe paradigma. Per dirla in altro modo, traduce le voci ACL in permessi POSIX per motivi di compatibilità con le versioni precedenti.

Diamo un'occhiata al file appena creato con cui lavoreremo in questo articolo, mysupersecretfile.txt:

ls -l mysupersecretfile.txt

Autorizzazioni piuttosto semplici per un documento così sensibile, giusto?

Notare il punto (.) dopo le autorizzazioni impostate. Ciò indica un contesto SELinux, che non è correlato agli ACL o alle maschere ACL.

Per chiarezza, esaminiamo anche le voci ACL del file, utilizzando il comando getfacl:

getfacl mysupersecretfile.txt

Le voci ACL correnti per le voci di utente e gruppo proprietario vengono mappate direttamente all'utente e al gruppo proprietario POSIX effettivi del file. Questo è normale per qualsiasi file che non ha voci ACL estese e viene chiamato "ACL minimo".

Supponiamo di aver ricevuto una richiesta per aggiungere un utente chiamato manager come voce ACL a questo file, con permessi di lettura. Lo realizzeremo con il comando setfacl. Quindi, esaminiamo le nuove autorizzazioni ACL utilizzando i comandi ls e getfacl:

setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt

Noterai ora il segno "+" accanto alle voci delle autorizzazioni nel comando ls, che indica che sono presenti voci ACL associate al file.

Adesso vedi la riga mask nell'output del comando getfacl? Oltre alla voce ACL estesa dell'utente manager, questa voce della maschera è stata assegnata automaticamente. Ciò è necessario; rappresenta i permessi massimi consentiti per qualsiasi utente con nome o oggetto di gruppo (di nuovo, oltre all'utente proprietario e agli oggetti di gruppo proprietari). In questo momento, il permesso di lettura equivale al permesso di lettura della maschera esistente.

Ora aggiungiamo un altro utente da una seconda richiesta, contractor, all'ACL del nostro file. Questa volta, però, dobbiamo concedere loro i permessi di lettura e scrittura. Vediamo come ciò influisce sulla maschera:

setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt

Ora, oltre alla voce ACL del manager (r), vediamo anche la voce dell'appaltatore (rw). Ma perché la voce della maschera è cambiata in lettura e scrittura?

Quando abbiamo aggiunto l'utente appaltatore con permessi di lettura e scrittura, ciò ha influito sulla maschera ACL perché, come accennato in precedenza, la maschera si riferisce ai massimi permessi consentiti degli utenti ACL e delle voci dei gruppi. Poiché abbiamo aggiunto i permessi di scrittura alla voce ACL dell'utente appaltatore, anche la maschera ottiene il permesso di scrittura.

Quando lavori con le ACL, vedrai che il ruolo dei permessi della classe del gruppo (come con l'output del comando ls -l) viene riproposto per riflettere la maschera ACL. Non preoccuparti, tuttavia, le autorizzazioni del proprietario del gruppo vengono ancora riportate nella voce ACL del "gruppo proprietario".

Tieni presente che se aggiungi un altro utente con meno autorizzazioni, ad esempio di sola lettura, questi non erediterà le autorizzazioni di maschera, proprio come l'utente manager non ha ottenuto l'autorizzazione di scrittura quando abbiamo aggiunto la voce ACL dell'utente appaltatore.

Autorizzazioni effettive

Possiamo impostare manualmente i permessi di immissione della maschera utilizzando il comando setfacl. Ciò ci consentirà di filtrare contemporaneamente tutte le autorizzazioni di utenti e/o gruppi impostati sul file o le voci ACL degli utenti esistenti del file, fino al minimo comune denominatore. Questo si chiama autorizzazioni effettive.

Impostiamo la maschera del nostro file su sola lettura, quindi diamo uno sguardo nuovo alle voci ACL:

setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt

Il commento che mostra i permessi effettivi dell'utente appaltatore ci fa sapere che, anche se gli sono stati concessi i permessi di lettura e scrittura, in realtà hanno solo il permesso di lettura. La modifica della maschera ha causato questo. Se esaminiamo nuovamente il file con ls -l, vedremo che i permessi della classe del gruppo (che ancora una volta viene riproposto per riflettere la maschera) sono cambiati:

ls -l mysupersecretfile.txt

Se vuoi aggiungere una voce ACL per un utente o un gruppo denominato, ma non vuoi ricalcolare la maschera, puoi utilizzare -n insieme a setfacl. Ciò limiterà l'ACL che stai aggiungendo alle autorizzazioni massime consentite dalla maschera (mostrate dalle autorizzazioni effettive della voce). Questa non è l'impostazione predefinita, però; tieni presente che la mascherina non è una forma di controllo accessi obbligatorio. Proviamolo di seguito:

setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt

Maschere predefinite

Quando lavori con le ACL, il concetto di maschere predefinite è molto simile alle voci ACL predefinite. Ad esempio, quando aggiungi una maschera predefinita a una directory, tutti i file e le sottodirectory appena creati al suo interno erediteranno la stessa maschera (così come la voce della maschera predefinita). Basta usare il parametro -d con il comando setfacl per applicare una maschera predefinita:

mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/

Le maschere predefinite e le voci ACL predefinite del resto sono applicabili solo alle directory poiché sono gli unici oggetti che possono contenere file e/o altre directory al loro interno a cui applicare queste voci ereditabili.


Le maschere ACL sono un modo per garantire che la sicurezza degli ACL venga gestita correttamente, indipendentemente dalle funzionalità del programma che li sta manipolando.

Poiché la tecnologia, il software e i concetti di sicurezza continuano a evolversi rapidamente, è importante ricordare che la compatibilità con le versioni precedenti è fondamentale per molti di noi e deve essere rispettata insieme ai nuovi progressi. Naturalmente, ciò non significa che non si possano avere nuovi campanelli e fischietti, significa solo che quei nuovi campanelli e fischietti dovrebbero aderire agli standard esistenti.

Articoli correlati: