Come impostare le liste di controllo degli accessi (ACL) e le quote disco per utenti e gruppi

Le liste di controllo degli accessi (anche note come ACL) sono una caratteristica del kernel Linux che consente di definire diritti di accesso più dettagliati per file e directory rispetto a quelli specificati dai permessi regolari ugo/rwx.

Ad esempio, i permessi standard ugo/rwx non consentono di impostare permessi diversi per singoli utenti o gruppi. Con le ACL, questo è relativamente facile da fare, come vedremo in questo articolo.

Verifica della compatibilità del file system con le ACL

Per assicurarti che i tuoi file system supportino attualmente le ACL, dovresti verificare che siano stati montati utilizzando l’opzione acl. Per farlo, utilizzeremo tune2fs per i file system ext2/3/4 come indicato di seguito. Sostituisci /dev/sda1 con il dispositivo o il file system che desideri controllare:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

Nota: Con XFS, le liste di controllo degli accessi sono supportate di default.

Nel seguente file system ext4, possiamo vedere che le ACL sono state abilitate per /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

Se il comando precedente non indica che il file system è stato montato con il supporto per le ACL, è molto probabilmente dovuto alla presenza dell’opzione noacl in /etc/fstab.

In tal caso, rimuovila, smonta il file system e quindi rimontalo, oppure riavvia semplicemente il sistema dopo aver salvato le modifiche a /etc/fstab.

Introduzione delle ACL in Linux

Per illustrare come funzionano gli ACL, useremo un gruppo chiamato sviluppatori e aggiungeremo gli utenti walterwhite e saulgoodman (sì, sono un fan di Breaking Bad!) ad esso.:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Prima di procedere, verifichiamo che entrambi gli utenti siano stati aggiunti al gruppo sviluppatori:

# id walterwhite
# id saulgoodman
Find User ID in Linux

Creiamo ora una directory chiamata test in /mnt, e un file chiamato acl.txt all’interno (/mnt/test/acl.txt).

Successivamente impostiamo il proprietario del gruppo su sviluppatori e cambiamo i permessi predefiniti ugo/rwx in modo ricorsivo a 770 (concedendo quindi i permessi di lettura, scrittura ed esecuzione sia al proprietario che al proprietario del gruppo del file):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

Come previsto, è possibile scrivere su /mnt/test/acl.txt come walterwhite o saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

Fino a qui tutto bene. Tuttavia, presto vedremo un problema quando dovremo concedere l’accesso in scrittura a /mnt/test/acl.txt per un altro utente che non è nel gruppo sviluppatori.

I permessi standard ugo/rwx richiederebbero che il nuovo utente venga aggiunto al gruppo sviluppatori, ma ciò gli darebbe gli stessi permessi su tutti gli oggetti di proprietà del gruppo. Ed è proprio qui che entrano in gioco gli ACL.

Impostazione degli ACL in Linux

Ci sono due tipi di ACL: gli ACL di accesso (che vengono applicati a un file o directory) e gli ACL predefiniti (opzionali), che possono essere applicati solo a una directory.

Se i file all’interno di una directory in cui è stata impostata una ACL predefinita non hanno una propria ACL, ereditano l’ACL predefinita della directory genitore.

Diamo all’utente gacanepa l’accesso in lettura e scrittura a /mnt/test/acl.txt. Prima di farlo, diamo un’occhiata alle impostazioni ACL attuali in quella directory con:

# getfacl /mnt/test/acl.txt

Poi cambia le ACL sul file, usa u: seguito dal nome utente e :rw per indicare le autorizzazioni di lettura/scrittura:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

E esegui di nuovo getfacl sul file per confrontare. L’immagine seguente mostra il “Prima” e “Dopo”:

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

Successivamente, dovremo dare agli altri le autorizzazioni di esecuzione sulla directory /mnt/test:

# chmod +x /mnt/test

Tieni presente che per accedere ai contenuti di una directory, un utente regolare ha bisogno di autorizzazioni di esecuzione su quella directory.

L’utente gacanepa dovrebbe ora essere in grado di scrivere sul file. Passa a quel account utente ed esegui il seguente comando per confermare:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Per impostare un’ACL predefinita su una directory (che i suoi contenuti erediteranno a meno che non vengano sovrascritti diversamente), aggiungi d: prima della regola e specifica una directory anziché un nome file:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

L’ACL sopra permetterà agli utenti che non fanno parte del gruppo proprietario di avere accesso in lettura ai futuri contenuti della directory /mnt/test. Nota la differenza nell’output di getfacl /mnt/test prima e dopo il cambiamento:

Set Default ACL to Linux Directory

Per rimuovere una specifica ACL, sostituisci -m nei comandi sopra con -x. Ad esempio,

# setfacl -x d:o /mnt/test

In alternativa, è possibile utilizzare l’opzione -b per rimuovere TUTTI gli ACL in un’unica operazione:

# setfacl -b /mnt/test

Per ulteriori informazioni ed esempi sull’uso degli ACL, fare riferimento al capitolo 10, sezione 2, della Guida alla sicurezza di openSUSE (disponibile anche per il download gratuito in formato PDF).

Impostare le quote disco Linux sugli utenti e sui filesystem

Lo spazio di archiviazione è un’altra risorsa che deve essere utilizzata e monitorata attentamente. Per fare ciò, è possibile impostare delle quote su base di filesystem, sia per singoli utenti che per gruppi.

Di conseguenza, viene impostato un limite sull’utilizzo del disco consentito per un determinato utente o un gruppo specifico, e puoi stare tranquillo che i tuoi dischi non saranno riempiti fino al limite da un utente negligente (o malintenzionato).

La prima cosa da fare per abilitare le quote su un filesystem è montarlo con le opzioni usrquota o grpquota (per le quote degli utenti e dei gruppi, rispettivamente) in /etc/fstab.

Ad esempio, abilitiamo le quote basate sugli utenti su /dev/vg00/vol_backups e le quote basate sui gruppi su /dev/vg00/vol_projects.

Nota che l’ UUID viene utilizzato per identificare ciascun filesystem.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Smonta e rimonta entrambi i filesystem:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Quindi controlla che le opzioni usrquota e grpquota siano presenti nell’output di mount (vedi evidenziato di seguito):

# mount | grep vg00
Check Linux User Quota and Group Quota

Infine, esegui i seguenti comandi per inizializzare e abilitare le quote:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

Detto ciò, assegniamo ora le quote all’utente e al gruppo che abbiamo menzionato in precedenza. Puoi successivamente disabilitare le quote con quotaoff.

Impostazione delle Quote Disco di Linux

Cominciamo impostando un ACL su /home/backups per l’utente gacanepa, che gli darà le autorizzazioni di lettura, scrittura ed esecuzione su quella directory:

# setfacl -m u:gacanepa:rwx /home/backups/

Poi con,

# edquota -u gacanepa

Imposteremo il limite soft a 900 e il limite hard a 1000 blocchi (1024 byte/blocco * 1000 blocchi = 1024000 byte = 1 MB) di spazio disco utilizzato.

Possiamo anche impostare un limite di 20 e 25 come limiti soft e hard sul numero di file che questo utente può creare.

Il comando sopra avvierà l’editor di testo ($EDITOR) con un file temporaneo dove possiamo impostare i limiti menzionati in precedenza:

Linux Disk Quota For User

Queste impostazioni faranno sì che venga mostrato un avviso all’utente gacanepa quando avrà raggiunto i limiti di 900 blocchi o 20 inode per un periodo di grazia predefinito di 7 giorni.

Se la situazione di over-quota non sarà stata eliminata entro allora (ad esempio, rimuovendo file), il limite soft diventerà il limite hard e a questo utente sarà impedito di utilizzare più spazio di archiviazione o creare più file.

Per testare, facciamo provare all’utente gacanepa di creare un file vuoto di 2 MB chiamato test1 all’interno di /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

Come puoi vedere, l’operazione di scrittura del file fallisce a causa del superamento della quota del disco. Poiché vengono scritti su disco solo i primi 1000 KB, il risultato in questo caso sarà probabilmente un file danneggiato.

Allo stesso modo, puoi creare una ACL per i gruppi di sviluppatori al fine di concedere ai membri di quel gruppo l’accesso rwx a /home/projects:

# setfacl -m g:developers:rwx /home/projects/

E impostare i limiti della quota con:

# edquota -g developers

Come abbiamo fatto in precedenza con l’utente gacanepa.

Il periodo di tolleranza può essere specificato per un numero qualsiasi di secondi, minuti, ore, giorni, settimane o mesi eseguendo.

# edquota -t

e aggiornando i valori sotto Periodo di tolleranza dei blocchi e Periodo di tolleranza degli inode.

A differenza dell’utilizzo di blocchi o inode (che sono impostati su base utente o gruppo), il periodo di tolleranza è impostato a livello di sistema.

Per visualizzare le quote, è possibile utilizzare quota -u [utente] o quota -g [gruppo] per un elenco rapido o repquota -v [/percorso/al/filesystem] per un report più dettagliato (verbose) e ben formattato.

Ovviamente, si desidera sostituire [utente], [gruppo] e [/percorso/al/filesystem] con i nomi specifici dell’utente / gruppo e del file system che si desidera controllare.

Riepilogo

In questo articolo abbiamo spiegato come impostare Liste di Controllo degli Accessi e quote disco per utenti e gruppi. Utilizzando entrambi, sarà possibile gestire in modo più efficace le autorizzazioni e l’utilizzo del disco.

Se vuoi saperne di più sulle quote, puoi fare riferimento al Quota Mini-HowTo nel Progetto di Documentazione Linux.

Naturalmente, puoi anche contare su di noi per rispondere alle domande. Inviale utilizzando il modulo di commento qui sotto e saremo più che felici di darci un’occhiata.

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/