Elenchi di controllo degli accessi (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 ugo/rwx autorizzazioni.
Ad esempio, lo standard ugo/rwx Le autorizzazioni non consentono di impostare autorizzazioni diverse per singoli utenti o gruppi diversi. Con gli ACL questo è relativamente facile da fare, come vedremo in questo articolo.
Per assicurarti che i tuoi file system supportino attualmente gli ACL, dovresti controllare che siano stati montati usando l'opzione acl. Per farlo, useremo tune2fs per i file system ext2/3/4 come indicato di seguito. Sostituire /dev/sda1 con il dispositivo o il file system che si desidera controllare:
# tune2fs -l /dev/sda1 | grep "Opzioni di montaggio predefinite:"
Nota: Insieme a XFS, gli elenchi di controllo di accesso sono supportati immediatamente.
Nel seguente ext4 file system, possiamo vedere che gli ACL sono stati abilitati per /dev/xvda2:
# tune2fs -l /dev/xvda2 | grep "Opzioni di montaggio predefinite:"
Se il comando precedente non indica che il file system è stato montato con il supporto per ACL, è molto probabilmente dovuto al noacl l'opzione è presente in /etc/fstab.
In tal caso, rimuoverlo, smontare il file system, quindi montarlo di nuovo o semplicemente riavviare il sistema dopo aver salvato le modifiche in /etc/fstab.
Per illustrare come funzionano gli ACL, useremo un gruppo chiamato sviluppatori e aggiungi utenti Walter White e saulgoodman (sì, sono un fan di Breaking Bad!).
# groupadd sviluppatori. # useradd walterwhite. # useradd saulgoodman. # usermod -a -G sviluppatori walterwhite. # usermod -a -G sviluppatori saulgoodman.
Prima di procedere, verifichiamo che entrambi gli utenti siano stati aggiunti al gruppo degli sviluppatori:
# id walterwhite. # ID saulgoodman.
Creiamo ora una directory chiamata test in /mnte un file chiamato acl.txt dentro (/mnt/test/acl.txt).
Quindi imposteremo il proprietario del gruppo su sviluppatori e cambia il suo valore predefinito ugo/rwx permessi ricorsivamente a 770 (concedendo così le autorizzazioni di lettura, scrittura ed esecuzione concesse sia al proprietario che al proprietario del gruppo del file):
# mkdir /mnt/test. # tocca /mnt/test/acl.txt. # chgrp -R sviluppatori /mnt/test. # chmod -R 770 /mnt/test.
Come previsto, puoi scrivere a /mnt/test/acl.txt come Walter White o saulgoodman:
# su - walterwhite. # echo "Mi chiamo Walter White" > /mnt/test/acl.txt. # Uscita. # su - saulgoodman. # echo "Mi chiamo Saul Goodman" >> /mnt/test/acl.txt. # Uscita.
Fin qui tutto bene. Tuttavia, vedremo presto un problema quando dovremo concedere l'accesso in scrittura a /mnt/test/acl.txt per un altro utente che non è nel gruppo degli sviluppatori.
Standard ugo/rwx le autorizzazioni richiederebbero che il nuovo utente venga aggiunto al gruppo di sviluppatori, ma ciò gli darebbe le stesse autorizzazioni su tutti gli oggetti di proprietà del gruppo. È proprio qui che gli ACL tornano utili.
Esistono due tipi di ACL: accedere agli ACL sono (che vengono applicati a un file o a una directory), e ACL predefiniti (opzionali), che può essere applicato solo a una directory.
Se file all'interno di una directory dove a predefinito ACL è stato impostato non hanno un proprio ACL, ereditano l'ACL predefinito della loro directory padre.
Diamo all'utente gacanepa accesso in lettura e scrittura a /mnt/test/acl.txt. Prima di farlo, diamo un'occhiata alle impostazioni ACL correnti in quella directory con:
# getfacl /mnt/test/acl.txt.
Quindi cambia gli ACL sul file, usa tu:
seguito dal nome utente e :rw
per indicare i permessi di lettura/scrittura:
# setfacl -m u: gacanepa: rw /mnt/test/acl.txt.
E corri getfacl sul file di nuovo per confrontare. L'immagine seguente mostra il "Prima di" e "Dopo":
# getfacl /mnt/test/acl.txt.
Successivamente, dovremo concedere ad altri i permessi di esecuzione sul /mnt/test elenco:
# chmod +x /mnt/test.
Tieni presente che per accedere ai contenuti di una directory, un utente normale deve eseguire i permessi su quella directory.
Utente gacanepa dovrebbe ora essere in grado di scrivere sul file. Passa a quell'account utente ed esegui il seguente comando per confermare:
# echo "Mi chiamo Gabriel Cánepa" >> /mnt/test/acl.txt.
Per impostare un ACL predefinito su una directory (che il suo contenuto erediterà se non diversamente sovrascritto), aggiungi D:
prima della regola e specifica una directory invece di un nome file:
# setfacl -m d: o: r /mnt/test. # getfacl /mnt/test/
L'ACL sopra consentirà agli utenti non nel gruppo proprietario di avere accesso in lettura ai contenuti futuri del /mnt/test directory. Notare la differenza nell'output di getfacl /mnt/test prima e dopo la modifica:
Per rimuovere un ACL specifico, sostituire -m
nei comandi sopra con -X
. Per esempio,
# setfacl -x d: o /mnt/test.
In alternativa, puoi anche utilizzare il -B
opzione per rimuovere TUTTI gli ACL in un solo passaggio:
# setfacl -b /mnt/test.
Per ulteriori informazioni ed esempi sull'uso degli ACL, fare riferimento a capitolo 10, sezione 2, del Guida alla sicurezza di openSUSE (disponibile per il download gratuito anche in formato PDF).
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 (per le quote utente e gruppo, rispettivamente) in /etc/fstab.
Ad esempio, abilitiamo le quote basate sull'utente su /dev/vg00/vol_backups e quote di gruppo su /dev/vg00/vol_projects.
Nota che il UUID viene utilizzato per identificare ogni file system.
UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 default, grpquota 0 0. UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 default, usrquota 0 0.
Smonta e rimonta entrambi i file system:
# smonta /home/progetti. # smonta /home/backup. # mount -o remount /home/projects. # mount -o remount /home/backup
Quindi controlla che le opzioni usrquota e grpquota siano presenti nell'output di mount (vedi evidenziato di seguito):
# monta | 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, ora assegniamo le quote al nome utente e al gruppo di cui abbiamo parlato prima. In seguito puoi disabilitare le quote con quotaoff.
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/backup/
Allora con,
# edquota -u gacanepa.
Faremo il morbido limite=900 e il duro limite=1000 blocchi (1024 byte/blocco * 1000 blocchi = 1024000 byte = 1 MB) di utilizzo dello spazio su disco.
Possiamo anche porre un limite di 20 e 25 come limiti soft e hard sul numero di file che questo utente può creare.
Il comando precedente avvierà l'editor di testo ($EDITORE) con un file temporaneo dove possiamo impostare i limiti menzionati in precedenza:
Queste impostazioni causeranno la visualizzazione di un avviso all'utente gacanepa quando ha raggiunto il 900 blocchi o 20 inode limiti per un periodo di grazia predefinito di 7 giorni.
Se la quota eccessiva situazione non è stata eliminata per allora (ad esempio, rimuovendo i file), il soft limit lo farà diventa il limite rigido e questo utente non potrà utilizzare più spazio di archiviazione o crearne di più File.
Per testare, facciamo provare all'utente gacanepa a creare un vuoto 2 MB file denominato prova1 dentro /home/backups:
# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1. # ls -lh /home/backup/test1.
Come puoi vedere, il file dell'operazione di scrittura non riesce a causa del superamento della quota del disco. Dal momento che solo il primo 1000 KB vengono scritti su disco, il risultato in questo caso sarà molto probabilmente un file corrotto.
Allo stesso modo, puoi creare un ACL per i gruppi di sviluppatori per dare ai membri di quel gruppo l'accesso rwx a /home/projects:
# setfacl -m g: developer: rwx /home/projects/
E imposta i limiti di quota con:
# edquota -g sviluppatori.
Proprio come abbiamo fatto con l'utente gacanepa prima.
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 sotto Blocco periodo di grazia e periodo di grazia Inode.
A differenza dell'utilizzo di blocchi o inode (che sono impostati su base utente o gruppo), il periodo di grazia è impostato a livello di sistema.
Per segnalare le quote, puoi utilizzare la quota -u [utente]
o quota -g [gruppo]
per un elenco veloce o repquota -v [/percorso/del/filesystem]
per un rapporto più dettagliato (prolisso) e ben formattato.
Certo, vorrai sostituire [utente]
, [gruppo]
, e [/percorso/del/filesystem]
con nomi utente/gruppo specifici e file system che si desidera controllare.
In questo articolo abbiamo spiegato come impostare Elenchi di controllo degli accessi e quote disco per utenti e gruppi. Utilizzando 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 nel progetto di documentazione di Linux.
Inutile dire che puoi contare su di noi anche per rispondere alle domande. Basta inviarli utilizzando il modulo di commento qui sotto e saremo più che lieti di dare un'occhiata.