Sei responsabile di un file server condiviso tra più gruppi di persone, che necessitano tutti di un accesso diverso? In questo tutorial esamineremo le nozioni di base degli ACL e li utilizzeremo in uno scenario di ufficio immaginario.
Cosa sono gli ACL?
Gli elenchi di controllo degli accessi (ACL) integrano il modello di autorizzazioni standard del file system su Linux e Unix. In poche parole, permettono di andare oltre il concetto di “utente/gruppo/altro” per creare set aggiuntivi di permessi per file e directory. Fanno anche cose interessanti come applicare automaticamente le autorizzazioni a nuovi file e directory. Ma prima, trattiamo alcuni concetti base sui permessi del file system Linux a cui lavorano insieme gli ACL.
Autorizzazioni del file system standard
Per comprendere i permessi del file system sotto Linux, devi prima sapere che Linux è un “sistema operativo multiutente”. Ciò significa che ne esistono molteplici profili utente che essenzialmente consentono a più di una persona di accedere al sistema, ognuna con le proprie libertà e restrizioni.
Alcuni account utente sono account “di sistema”; non quelli utilizzati da una persona, ma piuttosto da un software, ad esempio. I processi vengono eseguiti con questi account speciali per consentirli e limitarli a varie parti del sistema operativo, proprio come farebbe un normale account utente.
Ora che comprendiamo gli utenti, posso presentarvi i “gruppi”. I gruppi sono abbastanza facili da capire: sono semplicemente raccolte di utenti esistenti. Per assegnare l’autorizzazione per una risorsa a più utenti contemporaneamente, puoi creare un nuovo gruppo e concedere l’appartenenza a quel gruppo a utenti specifici. Quindi assegni l’autorizzazione per la risorsa al gruppo, anziché a ogni singolo utente. Ciò rende l’amministrazione più semplice e snella.
OK, parliamo di file e directory. Queste sono le risorse a cui ci preoccupiamo di garantire e proteggere l’accesso.
La maggior parte dei file system Linux (ad esempio EXT4, XFS e ZFS) consente di applicare 3 autorizzazioni primarie a file e directory. Queste autorizzazioni sono:
- Leggere: Consentire la lettura di un file (o elencare il contenuto all’interno di una directory)
- Scrivere: Consentire la scrittura o la modifica di un file (o creare file e sottodirectory dentro una directory)
- Eseguire: Permette di eseguire un programma o uno script (o di entrare in una directory, ad esempio con il file comando CD)
Tutti i file e le directory su un file system hanno permessi standard assegnati a 3 entità distinte: l’utente che ne è proprietario, il proprietario del gruppo e tutti gli altri utenti. A ciascuna entità può essere assegnata una combinazione di autorizzazioni di lettura, scrittura ed esecuzione (r/w/x). Puoi utilizzare il comando ls per vedere tutte queste informazioni:
ls -l mysupersecretfile.txt
- [U]autorizzazioni ser (proprietario).
- [G]autorizzazioni del gruppo
- Tutto [O]i permessi degli altri utenti
- Possesso del nome utente
- Nome del gruppo proprietario
Per impostazione predefinita, ogni utente appena creato viene assegnato anche a un nuovo gruppo primario con lo stesso nome. Nell’esempio sopra, #4 è il nome utente “utente” e #5 è il nome del gruppo “utente”. Tienilo a mente quando guardi un output come questo poiché all’inizio potrebbe creare confusione.
I file e le directory che gli utenti possono modificare dipendono da un paio di cose, incluso se l’utente ne è il “proprietario” o se dispone altrimenti delle autorizzazioni appropriate tramite l’appartenenza a un gruppo. Si noti che il utente root può modificare qualsiasi file sul sistema, indipendentemente dalla proprietà.
Questo approccio alle autorizzazioni del file system funziona bene per la maggior parte delle configurazioni domestiche e autonome. Naturalmente, quando lavori con sistemi in cui più utenti accedono alla stessa gerarchia di file e devi concedere a determinate persone l’accesso ad alcune aree (e limitarne l’accesso ad altre), inizierai a comprendere lo standard “1 proprietario, 1 gruppo” la metodologia è un po’ insufficiente.
In che modo gli ACL migliorano il modello di autorizzazioni standard
Gli elenchi di controllo di accesso aggiungono la possibilità di applicare voci di autorizzazione a più utenti e gruppi per file e directory. Un esempio in cui gli ACL sono una buona opzione è quando si desidera assegnare una determinata autorizzazione utente a un file a cui sono già assegnate autorizzazioni di proprietario e proprietario di gruppo specifiche.
Gli ACL per le directory seguono le autorizzazioni standard R/w/X modello in quanto ti danno la possibilità di (R)leggi (elenca il contenuto, ma non inserisci) la directory, (w)rite (creare) nuovi file e directory dentro la directory ed e(X)eseguire (entrare) nella directory.
Che ne dici di un esempio? Supponiamo che tu abbia un file, report.pdf, di proprietà di un utente, peter, con permessi di lettura+scrittura. Hai inoltre concesso la proprietà del gruppo di questo file al gruppo contabile. Ora hai ricevuto una richiesta per concedere l’accesso in lettura all’utente denominato lumberg.
Supponiamo che tu stia utilizzando il modello di autorizzazioni standard. Ecco alcune idee (futili) per completare questa richiesta:
- Non puoi concedere a Lumberg l’appartenenza al gruppo contabilità (questo gli darebbe accesso a tutti i tipi di altri file che non dovrebbe guardare).
- Inoltre, non si desidera, per una corretta pratica amministrativa, creare un gruppo completamente nuovo con gli utenti del gruppo contabilità più Lumberg, solo per questo file.
- Voi particolarmente non voglio aprire le autorizzazioni a tutti gli altri utenti, per ovvi motivi di sicurezza.
ls -l report.pdf Cosa fare? Beh, tu Potevo basta fare una pausa pranzo anticipata. Tuttavia, utilizziamo invece gli ACL!
Verifica del supporto ACL sul tuo sistema
La maggior parte delle distribuzioni Linux moderne supportano gli ACL immediatamente. I file system più comuni li supportano, le loro opzioni di montaggio predefinite includono il supporto ACL e le installazioni predefinite dovrebbero includere i pacchetti appropriati.
Per verificare sui file system ext2/3/4, utilizzare tune2fs. Ad esempio, se vuoi controllare /dev/sda1 (che contiene un file system ext4):
sudo tune2fs -l /dev/sda1 | grep “Default mount options” Per riferimento, ecco a elenco di diversi supporti di file system per ACL, raggruppati per piattaforma, scritto da IBM.
Il comando getfacl
Il comando getfacl visualizza (ottiene) elenchi di controllo di accesso ai file per file e directory. Se esegui getfacl sul nostro file di report dall’alto, vedrai:
getfacl report.pdf In questo momento l’output mostra il file ACL minimo del fascicolo. L’ACL minimo comprende le autorizzazioni standard per il proprietario, il gruppo proprietario e tutti gli altri utenti.
Se ci fosse un ACL esteso voce per un altro utente, chiamiamolo Michael, vedremmo questo:
getfacl report.pdf Oltre agli ACL minimi, ora disponiamo di una voce ACL estesa per l’utente michael (autorizzazioni di lettura+scrittura). Se elenchi nuovamente il file con ACL estesi, noterai un segno più (+) a destra delle autorizzazioni “altri utenti”, che indica che esistono voci ACL estese:
ls -l report.pdf
Il comando setfacl
Il comando setfacl è ciò che in realtà imposta ACL per file e directory. Aggiunge e rimuove voci di utenti e gruppi, modifica autorizzazioni e altre attività come l’impostazione di ACL predefinite sulle directory e l’utilizzo delle maschere. Lo utilizzeremo per completare la richiesta di cui sopra concedendo all’utente lumberg l’accesso in lettura a report.pdf.
Per aggiungere la nuova voce ACL utente, utilizzerai setfacl con questa sintassi (che analizzerò di seguito):
sudo setfacl -m u:lumberg:r report.pdf
- -M significa che stiamo modificando una voce ACL per il file
- tu: significa che stiamo aggiungendo un utente, seguito da due punti (:) separatore (a G: aggiunge un gruppo e o: aggiunge le autorizzazioni di tutti gli altri utenti)
- lumberg: è il nome utente che stiamo aggiungendo, seguito da un altro separatore di due punti
- R significa che stiamo aggiungendo i permessi di lettura (solo) alla voce
- rapporto.pdf è il nome del file a cui stiamo aggiungendo la voce ACL
Ora che è impostato possiamo dare un’occhiata, usando getfacl, ancora una volta:
getfacl report.pdf Hai notato la nostra new entry?
ACL predefiniti
Gli ACL predefiniti si applicano solo alle directory (cartelle). Quando imposti un ACL predefinito su una directory, la voce specificata verrà applicata automaticamente ogni nuovo file e directory al suo interno, indipendentemente da chi li crea. È una sorta di approccio onnicomprensivo e ricorsivo che lo rende piuttosto utile quando si pianifica la gerarchia del file system.
Assicuriamoci che Lumberg sia in grado di leggere nuovi file e inserire nuove directory create in Contabilità. Utilizzeremo l’opzione -d per aggiungere a ACL predefinito:
sudo setfacl -d -m u:lumberg:rX Accounting Una lettera maiuscola X applica il permesso di esecuzione solo alle nuove sottodirectory; non file.
Gli elenchi di controllo degli accessi sono ottimi se desideri portare le autorizzazioni del file system a un livello superiore. Puoi farla franca molto con le autorizzazioni standard di utente/gruppo/altre, ma probabilmente ci sarà un punto nei tuoi viaggi in cui l’utilizzo degli ACL ha molto più senso.