Ricerca nel sito web

Come impostare elenchi di controllo di accesso (ACL) e quote disco per utenti e gruppi


Gli elenchi di controllo di accesso (noti anche come ACL) sono una funzionalità del kernel Linux che consente di definire diritti di accesso più dettagliati per file e directory rispetto a quelli specificati dai normali permessi ugo/rwx.

Ad esempio, i permessi standard ugo/rwx non consentono di impostare permessi diversi per singoli utenti o gruppi diversi. Con gli 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 gli ACL, dovresti verificare che siano stati montati utilizzando l'opzione acl. Per fare ciò, 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, gli elenchi di controllo di accesso sono supportati immediatamente.

Nel seguente file system ext4, possiamo vedere che gli ACL sono stati abilitati per /dev/xvda2:

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

Se il comando precedente non indica che il file system è stato montato con il supporto per gli ACL, è molto probabile che sia presente l'opzione noacl in /etc/fstab.

In tal caso, rimuovilo, smonta il file system e quindi montalo di nuovo o semplicemente riavvia il sistema dopo aver salvato le modifiche su /etc/fstab.

Presentazione delle ACL in Linux

Per illustrare come funzionano gli ACL, utilizzeremo un gruppo chiamato developers 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

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

Quindi imposteremo il proprietario del gruppo su sviluppatori e modificheremo i suoi permessi ugo/rwx predefiniti in modo ricorsivo a 770 (concedendo così lettura, scrittura ed esecuzione autorizzazioni concesse sia al proprietario che al gruppo proprietario del file):

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

Come previsto, puoi scrivere a /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

Fin 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 fa parte del gruppo sviluppatori.

I permessi standard ugo/rwx richiederebbero che il nuovo utente venga aggiunto al gruppo degli sviluppatori, ma ciò gli darebbe gli stessi permessi su tutti gli oggetti di proprietà del gruppo. È proprio qui che gli ACL tornano utili.

Impostazione degli ACL in Linux

Esistono due tipi di ACL: le ACL di accesso (che vengono applicate a un file o una directory) e le ACL predefinite (facoltative), che possono essere applicate solo a una directory .

Se i file all'interno di una directory in cui è stato impostato un ACL predefinito non hanno un proprio ACL, ereditano l'ACL predefinito della directory principale.

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

getfacl /mnt/test/acl.txt

Quindi modifica gli ACL sul file, usa u: seguito dal nome utente e :rw per indicare i permessi di lettura/scrittura:

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

Ed esegui di nuovo getfacl sul file per confrontare. L'immagine seguente mostra “Prima” e “Dopo”:

getfacl /mnt/test/acl.txt

Successivamente, dovremo fornire ad altri i permessi di esecuzione sulla directory /mnt/test:


chmod +x /mnt/test

Tieni presente che per accedere al contenuto di una directory, un utente normale deve eseguire le autorizzazioni su quella directory.

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

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

Per impostare un ACL predefinito su una directory (che il suo contenuto erediterà a meno che non venga sovrascritto diversamente), aggiungi d: prima della regola e specifica una directory invece del nome di un file:

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

L'ACL di cui sopra consentirà 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 la modifica:

Per rimuovere un ACL specifico, sostituisci -m nei comandi precedenti con -x. Per esempio,

setfacl -x d:o /mnt/test

In alternativa, puoi anche utilizzare l'opzione -b per rimuovere TUTTI gli ACL in un solo passaggio:

setfacl -b /mnt/test

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

Imposta le quote del disco Linux su utenti e file system

Lo spazio di archiviazione è un'altra risorsa che deve essere utilizzata e monitorata con attenzione. Per fare ciò, le quote possono essere impostate in base al file system, sia per singoli utenti che per gruppi.

Pertanto, viene posto un limite all'utilizzo del disco consentito per un dato utente o un gruppo specifico e puoi essere certo che i tuoi dischi non verranno riempiti fino alla capacità da un utente negligente (o malintenzionato).

La prima cosa che devi fare per abilitare le quote su un file system è montarlo con le opzioni usrquota o grpquota (rispettivamente per le quote utente e gruppo) in /etc/fstab.

Ad esempio, abilitiamo le quote basate sull'utente su /dev/vg00/vol_backups e le quote basate sul gruppo su /dev/vg00/vol_projects.

Tieni presente che l'UUID viene utilizzato per identificare ciascun file system.

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

Smontare e rimontare entrambi i file system:

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

Controlla quindi che le opzioni usrquota e grpquota siano presenti nell'output di mount (vedi evidenziato sotto):

mount | grep vg00

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

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

Detto questo, assegniamo ora le quote al nome utente e al gruppo di cui abbiamo parlato prima. Potrai successivamente disattivare le quote con quotaoff.

Impostazione delle quote del disco Linux

Iniziamo impostando un ACL su /home/backups per l'utente gacanepa, che gli darà i permessi di lettura, scrittura ed esecuzione su quella directory:

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

Poi con,

edquota -u gacanepa

Realizzeremo i blocchi soft limit=900 e hard limit=1000 (1024 byte/blocco * 1000 blocchi=1024000 byte=1 MB ) dell'utilizzo dello spazio su disco.

Possiamo anche porre un limite di 20 e 25 come limiti flessibili e rigidi sul numero di file che questo utente può creare.

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

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

Se la situazione di superamento della quota non è stata eliminata entro quel momento (ad esempio, rimuovendo file), il limite flessibile diventerà il limite rigido e all'utente non sarà consentito utilizzare più spazio di archiviazione o creare più File.

Per testare, chiediamo all'utente gacanepa di provare a creare un file vuoto da 2 MB denominato test1 all'interno di /home/backups:

dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

Come puoi vedere, l'operazione di scrittura del file non riesce a causa del superamento della quota del disco. Poiché solo i primi 1000 KB vengono scritti sul disco, in questo caso molto probabilmente il risultato sarà un file corrotto.

Allo stesso modo, puoi creare un ACL per i gruppi di sviluppatori per fornire ai membri di quel gruppo l'accesso rwx a /home/projects:

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

E imposta i limiti di quota con:

edquota -g developers

Proprio come abbiamo fatto prima con l'utente gacanepa.

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

edquota -t

e aggiornando i valori in Periodo di tolleranza del blocco e Periodo di tolleranza dell'inode.

A differenza dell'utilizzo del blocco o dell'inode (impostato in base all'utente o al gruppo), il periodo di grazia è impostato a livello di sistema.

Per segnalare le quote, puoi utilizzare quota -u [utente] o quota -g [gruppo] per un elenco rapido o repquota -v [/path/to /filesystem] per un report più dettagliato (verboso) e ben formattato.

Naturalmente, vorrai sostituire [utente], [gruppo] e [/path/to/filesystem] con l'utente specifico/i nomi dei gruppi e il file system che desideri controllare.

Riepilogo

In questo articolo abbiamo spiegato come impostare gli Elenchi di controllo degli accessi e le quote disco per utenti e gruppi. Usandoli entrambi, sarai in grado di gestire le autorizzazioni e l'utilizzo del disco in modo più efficace.

Se vuoi saperne di più sulle quote, puoi fare riferimento al Quota Mini-HowTo in The Linux Documentation Project.

Inutile dire che puoi anche contare su di noi per rispondere alle domande. Basta inviarli utilizzando il modulo di commento qui sotto e saremo più che lieti di dare un'occhiata.