Ciao a tutti. Questa è la traduzione di un articolo dal libro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 e EX300.
Da parte mia: Spero che l'articolo sia utile non solo ai principianti, ma anche aiuto ai più esperti amministratori a organizzare le proprie conoscenze.
Bene, iniziamo.

Per accedere ai file in Linux, si utilizzano le autorizzazioni. Queste autorizzazioni sono assegnate a tre oggetti: il proprietario del file, il proprietario del gruppo e un altro oggetto (vale a dire, tutti gli altri). In questo articolo scoprirete come applicare le autorizzazioni.
L'articolo inizia con una panoramica dei concetti di base, seguita dalla discussione delle autorizzazioni speciali (Special permissions) e delle liste di controllo degli accessi (ACL). Alla fine di quest'articolo esamineremo la configurazione dei diritti di accesso predefiniti tramite umask, così come la gestione degli attributi estesi dell'utente.
Gestione della proprietà dei file
Prima di discutere delle autorizzazioni, è necessario conoscere il ruolo del proprietario di file e directory. La proprietà dei file e delle directory è fondamentale per lavorare con le autorizzazioni. In questa sezione scoprirete prima come visualizzare il proprietario. Poi apprenderete come cambiare il proprietario gruppo e utente per file e directory.
Visualizzazione del proprietario del file o della directory
In Linux, ogni file e ogni directory ha due proprietari: l'utente e il proprietario del gruppo.
Questi proprietari vengono impostati al momento della creazione del file o della directory. L'utente che crea il file diventa il proprietario di quel file, e il gruppo primario a cui appartiene lo stesso utente diventa anch'esso proprietario di quel file. Per determinare se hai come utente diritti di accesso al file o alla directory, la shell verifica la proprietà.
Ciò avviene nel seguente ordine:
- La shell verifica se sei il proprietario del file a cui vuoi accedere. Se sei il proprietario, ottieni le autorizzazioni e la shell interrompe il controllo.
- Se non sei il proprietario del file, la shell verificherà se sei membro del gruppo che ha le autorizzazioni per quel file. Se sei membro di quel gruppo, ottieni accesso al file con le autorizzazioni stabilite per il gruppo, e la shell interromperà il controllo.
- Se non sei né l'utente né il proprietario del gruppo, ottieni i diritti di altri utenti (Other).
Per visualizzare le attuali assegnazioni del proprietario, puoi utilizzare il comando ls -l. Questo comando mostra l'utente e il proprietario del gruppo. Di seguito puoi vedere le impostazioni del proprietario per le directory nella directory /home.
[root@server1 home]# ls -l
total 8
drwx------. 3 bob bob 74 Feb 6 10:13 bob
drwx------. 3 caroline caroline 74 Feb 6 10:13 caroline
drwx------. 3 fozia fozia 74 Feb 6 10:13 fozia
drwx------. 3 lara lara 74 Feb 6 10:13 lara
drwx------. 5 lisa lisa 4096 Feb 6 10:12 lisa
drwx------. 14 user user 4096 Feb 5 10:35 user
Utilizzando il comando ls puoi visualizzare il proprietario dei file in questa directory. A volte può essere utile ottenere un elenco di tutti i file nel sistema in cui questo utente o gruppo è elencato come proprietario. Per questo puoi usare find. L'argomento find -user può essere utilizzato per questo scopo. Ad esempio, il seguente comando mostra tutti i file di cui l'utente linda è il proprietario:
find / -user lindaPuoi anche utilizzare find per cercare i file di cui un determinato gruppo è il proprietario.
Ad esempio, il seguente comando cerca tutti i file appartenenti al gruppo users:
find / -group usersCambiamento del proprietario
Per applicare i permessi appropriati, la prima cosa da considerare è la proprietà. Per questo c'è il comando chown. La sintassi di questo comando è semplice da capire:
chown chi cosaAd esempio, il seguente comando cambia il proprietario della directory /home/account in utente linda:
chown linda /home/accountTeam chown ha diverse opzioni, una delle quali è particolarmente utile: -R. Puoi intuire cosa fa, perché questa opzione è disponibile anche per molti altri comandi. Permette di impostare ricorsivamente il proprietario, consentendo di impostare il proprietario della directory corrente e di tutto ciò che si trova al di sotto. Il seguente comando cambia il proprietario per la directory /home e tutto ciò che si trova sotto in utente linda:
Ora i proprietari sono così:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Eseguiamo:
[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#
Ora l'utente lisa è diventato il proprietario della directory account:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Cambiamento del proprietario del gruppo
Ci sono due modi per cambiare la proprietà del gruppo. Puoi farlo usando chown, ma c'è un comando speciale chiamato chgrp, che esegue questo lavoro. Se desideri usare il comando chown, usa . o : prima del nome del gruppo.
Il seguente comando cambia il proprietario di un gruppo /home/account al gruppo account:
chown .account /home/account
Puoi usare chown per cambiare il proprietario dell'utente e/o del gruppo in diversi modi. Ecco alcuni esempi:
- chown lisa myfile1 stabilisce l'utente lisa come proprietario del file myfile1.
- chown lisa.sales myfile stabilisce l'utente lisa come proprietario del file myfile e imposta inoltre il gruppo sales come proprietario di quello stesso file.
- chown lisa:sales myfile è lo stesso del comando precedente.
- chown .sales myfile stabilisce il gruppo sales come proprietario del file myfile senza cambiare il proprietario dell'utente.
- chown :sales myfile è lo stesso del comando precedente.
Puoi usare il comando chgrp, per cambiare il proprietario del gruppo. Consideriamo il seguente esempio, in cui puoi chgrp impostare il gruppo sales come proprietario della directory account:
chgrp .sales /home/accountCome nel caso di chown, puoi usare l'opzione -R con chgrp, e anche cambiare ricorsivamente il proprietario del gruppo.
Comprendere il proprietario predefinito
Potresti aver notato che quando un utente crea un file, si applica la proprietà predefinita.
L'utente che crea il file diventa automaticamente il proprietario di tale file, e il gruppo principale di questo utente diventa automaticamente il proprietario di tale file. Di solito, questo è il gruppo indicato nel file /etc/passwd come gruppo principale dell'utente. Tuttavia, se l'utente è membro di più gruppi, può cambiare il gruppo principale effettivo.
Per mostrare l'attuale gruppo primario effettivo, l'utente può usare il comando groups:
[root@server1 ~]# groups lisa
lisa : lisa account sales
Se l'utente corrente linda desidera cambiare il gruppo primario effettivo, utilizzerà il comando newgrp, seguito dal nome del gruppo che desidera impostare come nuovo gruppo primario effettivo. Dopo aver utilizzato il comando newgrp il gruppo primario sarà attivo finché l'utente non inserirà il comando exit o non esca dal sistema.
Di seguito è riportato come l'utente linda usa questo comando, dove il gruppo primario è diventato il gruppo sales:
lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
Dopo aver modificato il gruppo principale attivo, tutti i nuovi file creati dall'utente avranno questo gruppo come proprietario. Per tornare alle impostazioni originali del gruppo primario, utilizza exit.
Per poter utilizzare il comando newgrp, l'utente deve essere membro del gruppo che desidera utilizzare come primario. Inoltre, la password di gruppo può essere utilizzata per il gruppo tramite il comando gpasswd. Se l'utente utilizza il comando newgrp, ma non è membro del gruppo target, la shell richiede la password del gruppo. Dopo aver inserito la password del gruppo corretta, verrà impostato un nuovo gruppo primario efficace.
Gestione dei diritti principali
Il sistema di autorizzazioni di Linux è stato inventato negli anni '70. Poiché le esigenze di calcolo erano limitate in quegli anni, il sistema di autorizzazioni di base era piuttosto limitato. Questo sistema di autorizzazioni utilizza tre autorizzazioni che possono essere applicate a file e directory. In questa sezione imparerai come usare e modificare queste autorizzazioni.
Comprendere i diritti di lettura, scrittura ed esecuzione
Le tre autorizzazioni principali ti consentono di leggere, scrivere ed eseguire file. L'effetto di queste autorizzazioni è diverso quando applicato a file o directory. Relativamente a un file, l'autorizzazione di lettura ti consente di aprire il file per la lettura. Di conseguenza, puoi leggere il suo contenuto, ma ciò significa che il tuo computer può aprire il file per fare qualcosa con esso.
Un file eseguibile che richiede accesso a una libreria deve, ad esempio, avere accesso in lettura a questa libreria. Da ciò si deduce che l'autorizzazione di lettura è la più fondamentale di cui hai bisogno per lavorare con i file.
Relativamente a una directory, la lettura consente di visualizzare il contenuto di quella directory. Dovresti sapere che questa autorizzazione non ti consente di leggere i file all'interno della directory. Il sistema di autorizzazioni di Linux non conosce l'ereditarietà, e l'unico modo per leggere un file è utilizzare le autorizzazioni di lettura per quel file.
Come probabilmente potrete intuire, il permesso di scrittura, se applicato a un file, consente di scrivere nel file. In altre parole, permette di modificare il contenuto di file esistenti. Tuttavia, non consente di creare o eliminare nuovi file o modificare i diritti di accesso al file. Per questo, è necessario concedere il permesso di scrittura alla cartella in cui si desidera creare il file. Nelle cartelle, questo permesso consente anche di creare ed eliminare nuove sottocartelle.
Il permesso di esecuzione è ciò che serve per eseguire un file. Non verrà mai impostato di default, il che rende Linux praticamente completamente immune ai virus. Solo qualcuno con diritti di scrittura sulla cartella può applicare il permesso di esecuzione.
Di seguito viene riassunto l'uso dei permessi di base:

Uso di chmod
Per gestire i diritti si utilizza il comando chmod. Quando si utilizza chmod è possibile impostare i permessi per l'utente (user), il gruppo (group) e altri (other). È possibile utilizzare questo comando in due modalità: modalità relativa e modalità assoluta. In modalità assoluta si usano tre cifre per impostare i permessi di base.

Quando si impostano i permessi, calcola il valore necessario. Se vuoi impostare lettura, scrittura ed esecuzione per l'utente, lettura ed esecuzione per il gruppo, e lettura ed esecuzione per altri nel file /somefile, allora utilizzi il seguente comando chmod:
chmod 755 /somefileQuando utilizzi chmod in questo modo, tutti i permessi attuali vengono sovrascritti dai permessi impostati da te.
Se desideri modificare i permessi rispetto ai permessi attuali, puoi utilizzare chmod in modalità relativa. Quando utilizzi chmod in modalità relativa lavori con tre indicatori per specificare cosa desideri fare:
- Prima indichi per chi desideri modificare i permessi. A tal fine, puoi scegliere tra l'utente (u), il gruppo (g) e altri (o).
- ) Poi utilizzi un operatore per aggiungere o rimuovere permessi dallo stato attuale o li imposti in modo assoluto.
- Infine utilizzi r, w e x, per specificare quali permessi desideri impostare.
Quando modifichi i permessi in modalità relativa, puoi saltare parte di «chi» per aggiungere o rimuovere i permessi per tutti gli oggetti. Ad esempio, questo comando aggiunge il permesso di esecuzione per tutti gli utenti:
chmod +x somefileLavorando in modalità relativa, puoi anche usare comandi più complessi. Ad esempio, questo comando aggiunge il permesso di scrittura al gruppo e rimuove la lettura per gli altri:
chmod g+w,o-r somefileQuando utilizzi chmod -R o+rx /data imposti il permesso di esecuzione per tutte le cartelle, così come per i file nella cartella /data. Per impostare il permesso di esecuzione solo per le cartelle, e non per i file, usa chmod -R o+ rX /data.
L'uso della lettera maiuscola X garantisce che i file non ricevano permesso di esecuzione se non hanno già un permesso di esecuzione impostato per alcuni oggetti. Questo rende X un modo più sensato di gestire i permessi di esecuzione; eviterà di impostare tale permesso su file dove non è necessario.
Permessi avanzati
Oltre ai permessi di base di cui hai appena letto, in Linux ci sono anche un insieme di permessi avanzati. Non sono i permessi che imposti per impostazione predefinita, ma a volte forniscono un utile complemento. In questa sezione scoprirai cosa sono e come configurarli.
Comprendere i permessi avanzati SUID, GUID e sticky bit
Ci sono tre permessi avanzati. Il primo è il permesso di impostazione dell'ID utente (SUID). In alcune situazioni particolari, puoi applicare questo permesso ai file eseguibili. Per impostazione predefinita, l'utente che esegue il file eseguibile lo fa con i propri permessi.
Per gli utenti normali, questo significa generalmente che l'uso del programma è limitato. Tuttavia, in alcuni casi, un utente ha bisogno di permessi speciali, solo per svolgere un'attività specifica.
Consideriamo, ad esempio, la situazione in cui un utente deve cambiare la propria password. Per fare ciò, l'utente deve scrivere la sua nuova password nel file /etc/shadow. Tuttavia, questo file non è scrivibile dagli utenti che non hanno accesso root:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow
L'autorizzazione SUID offre una soluzione a questo problema. Nell'utilità /usr/bin/passwd questa autorizzazione è applicata per impostazione predefinita. Ciò significa che durante la modifica della password, l'utente ottiene temporaneamente i diritti di root, permettendogli di scrivere nel file /etc/shadow. Puoi vedere l'autorizzazione SUID con ls -l come s nella posizione in cui ti aspetteresti di vedere x per le autorizzazioni utente:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd
L'autorizzazione SUID può sembrare utile (e in alcuni casi lo è), ma allo stesso tempo è potenzialmente pericolosa. Se usata in modo errato, puoi accidentalmente concedere diritti di accesso root. Pertanto, consiglio di usarla solo con la massima cautela.
La maggior parte degli amministratori non avrà mai bisogno di usarla; la vedrai solo in alcuni file dove il sistema operativo deve impostarla per impostazione predefinita.
La seconda autorizzazione speciale è l'identificatore di gruppo (SGID). Questa autorizzazione ha due effetti. Quando applicata a un file eseguibile, consente all'utente che esegue il file di avere i diritti del proprietario del gruppo di quel file. Pertanto, lo SGID può eseguire più o meno la stessa cosa dello SUID. Tuttavia, per questo scopo, lo SGID è praticamente poco usato.
Come nel caso dell'autorizzazione SUID, lo SGID è applicato a determinati file di sistema come impostazione predefinita.
Quando applicato a una directory, lo SGID può essere utile, poiché puoi usarlo per impostare il proprietario del gruppo predefinito per i file e le sottodirectory create in quella directory. Per impostazione predefinita, quando un utente crea un file, il suo gruppo primario effettivo viene impostato come proprietario del gruppo per quel file.
Questo non è sempre molto utile, soprattutto perché per gli utenti Red Hat/CentOS il gruppo principale è impostato su un gruppo con lo stesso nome dell'utente, e nel quale l'utente è l'unico partecipante. Pertanto, per impostazione predefinita, i file creati dall'utente saranno di gruppo per l'accesso condiviso.
Immagina una situazione in cui gli utenti linda e lori lavorano nella contabilità e sono membri del gruppo account. Di default, questi utenti sono membri di un gruppo privato, del quale sono l'unico membro. Tuttavia, entrambi gli utenti sono membri del gruppo account, ma anche come parametro del gruppo secondario.
La situazione predefinita è che quando uno di questi utenti crea un file, il gruppo principale diventa il proprietario. Pertanto, di default, linda non può accedere ai file creati da lori, e viceversa. Tuttavia, se crei una directory condivisa per il gruppo (diciamo, /groups/account) e ti assicuri che il permesso SGID sia applicato a questa directory e che l'account di gruppo sia impostato come proprietario di gruppo per questa directory, tutti i file creati in questa directory e in tutte le sue sottodirectory riceveranno anche il gruppo account come gruppo proprietario predefinito.
Per questo motivo, il permesso SGID è una autorizzazione molto utile da impostare nelle directory dei gruppi condivisi.
Il permesso SGID è mostrato nell'output ls -l come s nella posizione in cui di solito trovi il permesso di esecuzione del gruppo:
[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account
Il terzo dei permessi speciali è il sticky bit. Questo permesso è utile per proteggere i file da cancellazioni accidentali in un ambiente in cui più utenti hanno diritti di scrittura nella stessa directory. Se è applicato il sticky bit, un utente può eliminare un file solo se è il proprietario del file o della directory in cui si trova il file. Per questo motivo, è applicato come autorizzazione predefinita per la directory /tmp e può essere utile anche per le directory dei gruppi condivisi.
Senza il sticky bit, se un utente può creare file in una directory, può anche eliminare file da quella directory. In un ambiente di gruppo pubblico, questo può essere frustrante. Immagina gli utenti linda e lori, entrambi con diritti di scrittura nella directory /data/account e ottenere questi permessi grazie alla partecipazione al gruppo account. Pertanto, linda può eliminare file creati da lori, e viceversa.
Quando applichi il sticky bit, un utente può eliminare file solo se è soddisfatta una delle seguenti condizioni:
- L'utente è il proprietario del file;
- L'utente è il proprietario della directory in cui si trova il file.
Quando utilizzi ls -l, puoi vedere il sticky bit come t nella posizione in cui di solito vedi l'autorizzazione per l'esecuzione per gli altri:
[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/
Applicazione dei privilegi avanzati
Per applicare SUID, SGID e sticky bit, puoi anche usare chmod. SUID ha un valore numerico di 4, SGID ha un valore numerico di 2 e sticky bit ha un valore numerico di 1.
Se vuoi applicare queste autorizzazioni, devi aggiungere un argomento a quattro cifre in chmod, la prima cifra delle quali riguarda le autorizzazioni speciali. La seguente riga, ad esempio, aggiungerà l'autorizzazione SGID alla directory e imposterà rwx per l'utente e rx per il gruppo e gli altri:
chmod 2755 /somedirÈ piuttosto poco pratico, se hai bisogno di controllare i diritti di accesso attuali, che sono impostati, prima di lavorare con chmod in modalità assoluta. (Rischi di sovrascrivere le autorizzazioni se non lo fai.) Pertanto, ti consiglio di lavorare in modalità relativa, se hai bisogno di applicare uno qualsiasi dei privilegi speciali:
- Per SUID usa chmod u+s.
- Per SGID usa chmod g+s.
- Per sticky bit usa chmod +t, e poi il nome del file o della directory per il quale vuoi impostare le autorizzazioni.
Nella tabella è riassunto tutto ciò che è importante sapere per gestire le autorizzazioni speciali.

Esempio di utilizzo dei diritti speciali
In questo esempio utilizzi le autorizzazioni speciali per rendere più semplice lo scambio di file tra i membri del gruppo nella directory condivisa. Assegni il bit ID dell'identificatore di gruppo impostato, così come il sticky bit, e vedi che dopo la loro impostazione vengono aggiunte funzionalità che facilitano la collaborazione tra i membri del gruppo.
- Apri un terminale in cui sei l'utente linda. Puoi creare un utente con il comando useradd linda, aggiungi una password passwd linda.
- Crea la directory /data e la sottodirectory /data/sales con il comando mkdir -p /data/sales. Esegui cd /data/sales, per passare alla directory sales. Esegui touch linda1 e touch linda2, per creare due file vuoti di cui linda è il proprietario.
- Esegui su — lisa per cambiare l'utente corrente in lisa, che è anche un membro del gruppo sales.
- Esegui cd /data/sales ed esegui da questa directory. ls -lVedrai i due file creati dall'utente linda e appartenenti al gruppo linda. Esegui rm -f linda*. Questo eliminerà entrambi i file.
- Esegui touch lisa1 e touch lisa2, per creare due file di cui lisa è il proprietario.
- Esegui su — per elevare i vostri privilegi al livello root.
- Esegui chmod g+s,o+t /data/sales, per impostare il bit del identificatore di gruppo (GUID) e anche il bit sticky nella directory del gruppo comune.
- Esegui su — linda. Poi eseguite touch linda3 e touch linda4. Ora dovreste vedere che i due file creati appartengono al gruppo sales, che è il proprietario del gruppo nella directory /data/sales.
- Esegui rm -rf lisa*. Il bit sticky impedisce la rimozione di questi file a nome dell'utente linda, poiché non siete i proprietari di questi file. Ricordate che se l'utente linda è il proprietario della directory /data/sales, può comunque rimuovere questi file!
Gestione degli ACL (setfacl, getfacl) in Linux
Anche se i permessi estesi di cui abbiamo discusso sopra aggiungono funzionalità utili al modo in cui Linux gestisce le autorizzazioni, non vi permettono di concedere autorizzazioni a più di un utente o di un gruppo in un singolo file.
Le liste di controllo accesso offrono questa funzione. Inoltre, consentono agli amministratori di impostare permessi predefiniti in modi complessi, dove le autorizzazioni impostate possono variare tra le diverse directory.
Comprendere gli ACL
Sebbene la sottosistema ACL aggiunga ottime funzionalità al vostro server, presenta uno svantaggio: non tutte le utilità la supportano. Di conseguenza, potreste perdere le impostazioni ACL durante la copia o lo spostamento di file, e il software di backup potrebbe non eseguire il backup delle impostazioni ACL.
L'utilità tar non supporta gli ACL. Per assicurarvi che le impostazioni ACL non vengano perse quando si crea un backup, utilizzate star invece di tar. star funziona con gli stessi parametri di tar; semplicemente aggiunge il supporto per le impostazioni ACL.
Potete anche eseguire il backup degli ACL utilizzando getfacl, che possono essere ripristinati con il comando setfacl. Per creare un backup, utilizzate getfacl -R /directory > file.acls. Per ripristinare le impostazioni da un file di backup, utilizzate setfacl —restore=file.acl.
La mancanza di supporto da parte di alcuni strumenti non dovrebbe essere un problema. Le liste ACL sono spesso applicate alle directory come misura strutturale, piuttosto che a file singoli.
Pertanto, non saranno molti, ma solo alcuni, applicati in punti strategici del file system. Di conseguenza, ripristinare le liste ACL originali con cui hai lavorato è relativamente semplice, anche se il tuo software di backup non le supporta.
Preparazione del file system per ACL
Prima di iniziare a lavorare con le ACL, potrebbe essere necessario preparare il file system per supportare le ACL. Poiché è necessario estendere i metadati del file system, non sempre esiste supporto predefinito per le ACL nel file system. Se durante la configurazione delle liste ACL per il file system ricevi il messaggio "operazione non supportata", potrebbe significare che il tuo file system non supporta le ACL.
Per risolvere questo problema, è necessario aggiungere l'opzione acl mount nel file /etc/fstab, affinché il file system venga montato con supporto per le ACL di default.
Modifica e visualizzazione delle impostazioni ACL con setfacl e getfacl
Per impostare le ACL, hai bisogno del comando setfacl. Per vedere le attuali impostazioni ACL, hai bisogno di getfacl. Il comando ls -l non mostra alcuna ACL esistente; mostra semplicemente un + dopo l'elenco delle autorizzazioni, il che indica che le liste ACL si applicano anche al file.
Prima di configurare le liste ACL, è sempre utile mostrare le attuali impostazioni ACL con getfacl. Di seguito, nell'esempio, puoi vedere i diritti di accesso attuali, come mostrato da ls -l, così come mostrato da getfacl. Se guardi abbastanza attentamente, vedrai che le informazioni mostrate sono esattamente le stesse.
[root@server1 \/]# ls -ld \/dir\ndrwxr-xr-x. 2 root root 6 Feb 6 11:28 \/dir
[root@server1 \/]# getfacl \/dir
getfacl: Rimozione del '/' iniziale dai nomi dei percorsi assoluti
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
Dall'esecuzione del comando getfacl è evidente che le autorizzazioni sono mostrate per tre diversi oggetti: utente, gruppo e altri. Ora aggiungiamo un ACL per dare diritti di lettura e esecuzione al gruppo sales. Il comando per questo è setfacl -m g:sales:rx \/dir. In questo comando -m indica che le attuali impostazioni ACL devono essere modificate. Dopo di che g:sales:rx informa il comando di impostare l'ACL per la lettura e l'esecuzione (rx) per il gruppo (g) sales. Di seguito puoi vedere come appare il comando, nonché l'output del comando getfacl dopo la modifica delle attuali impostazioni ACL.
[root@server1 \/]# setfacl -m g:sales:rx \/dir
[root@server1 \/]# getfacl \/dir
getfacl: Rimozione del '/' iniziale dai nomi dei percorsi assoluti
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x
Ora che comprendi come impostare un ACL di gruppo, è facile capire l'ACL per gli utenti e altri utenti. Ad esempio, il comando setfacl -m u:linda:rwx /data permette all'utente linda di avere permessi nella directory /data, senza farlo diventare il proprietario e senza modificare il proprietario attuale.
Team setfacl ha molte funzionalità e opzioni. Un'opzione è particolarmente importante, il parametro -R. Se utilizzata, l'opzione imposta l'ACL per tutti i file e sottodirectory che attualmente esistono nella directory in cui stai impostando l'ACL. È consigliabile utilizzare sempre questa opzione quando si modificano i listati ACL per directory esistenti.
Lavorare con gli ACL predefiniti
Uno dei vantaggi dell'uso degli ACL è che puoi concedere permessi a più utenti o gruppi all'interno di una directory. Un altro vantaggio è che puoi abilitare l'ereditarietà, lavorando con gli ACL predefiniti.
Impostando l'ACL predefinito, definirai i permessi che saranno stabiliti per tutti i nuovi elementi creati nella directory. Tieni presente che l'ACL predefinito non modifica i permessi per i file e le sottodirectory esistenti. Per cambiarli, è necessario aggiungere anche un normale ACL!
È importante sapere. Se desideri utilizzare l'ACL per configurare l'accesso di più utenti o gruppi a una stessa directory, devi impostare l'ACL due volte. Prima utilizza setfacl -R -m, per cambiare l'ACL per i file attuali. Poi utilizza setfacl -m d:, per occuparti di tutti i nuovi elementi che verranno anch'essi creati.
Per impostare l'ACL predefinito, devi semplicemente aggiungere l'opzione d dopo l'opzione -m (l'ordine è importante!). Quindi utilizza setfacl -m d:g:sales:rx /data, se vuoi che il gruppo vendite possa leggere ed eseguire tutto ciò che verrà mai creato nella directory /data.
Quando si utilizzano gli ACL predefiniti, può anche essere utile impostare l'ACL per altri. Solitamente, ciò non ha molto senso, perché puoi anche modificare i permessi per altri utilizzando chmod. Tuttavia, quello che non puoi fare con chmod, indica i diritti che devono essere concessi ad altri utenti per ogni nuovo file che verrà mai creato. Se desideri che gli altri non abbiano alcuna autorizzazione su qualsiasi cosa creata in /data, ad esempio, usa setfacl -m d:o::- /data.
Le ACL e le normali autorizzazioni non sono sempre ben integrate. Possono sorgere problemi se hai applicato un'ACL predefinita a una directory, dopo di che sono stati aggiunti elementi a tale directory, e poi tenterai di modificare le normali autorizzazioni. Le modifiche che si applicano alle normali autorizzazioni non saranno ben riflesse nella revisione delle ACL. Per evitare problemi, imposta prima le normali autorizzazioni, quindi applica l'ACL predefinita (e dopo cerca di non modificarle nuovamente).
Esempio di gestione dei diritti avanzati utilizzando le ACL
In questo esempio continuerai a lavorare con le directory /data/account e /data/sales, che hai creato in precedenza. Negli esempi precedenti, hai garantito che il gruppo sales avesse autorizzazioni su /data/sales, mentre il gruppo account avesse autorizzazioni su /data/account.
Per prima cosa assicurati che il gruppo account riceva autorizzazioni di lettura nella directory /data/sales, e che il gruppo sales riceva autorizzazioni di lettura nella directory /data/account.
Poi imposti le liste ACL predefinite per assicurarti che per tutti i nuovi file siano correttamente impostate le autorizzazioni per tutti i nuovi elementi.
- Apri il terminale.
- Esegui setfacl -m g:account:rx /data/sales e setfacl -m g:sales:rx /data/account.
- Esegui getfacl, per assicurarti che i diritti di accesso siano stati impostati come desideravi.
- Esegui setfacl -m d:g:account:rwx,g:sales:rx /data/sales, per impostare l'ACL predefinita per la directory sales.
- Aggiungi l'ACL predefinita per la directory /data/account, utilizzando setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Assicurati che le impostazioni delle ACL siano attive, aggiungendo un nuovo file in /data/sales. Esegui touch /data/sales/newfile e poi esegui getfacl /data/sales/newfile per controllare le autorizzazioni correnti.
Impostazione dei diritti predefiniti con umask
Sopra hai imparato come lavorare con le ACL predefinite. Se non utilizzi le ACL, c'è una variabile di shell che determina i diritti predefiniti che riceverai: umask (maschera inversa). In questa sezione imparerai come modificare le autorizzazioni predefinite usando umask.
Probabilmente hai notato che quando crei un nuovo file vengono impostate alcune autorizzazioni predefinite. Queste autorizzazioni sono determinate dalla configurazione umask. Questo parametro di shell si applica a tutti gli utenti al momento dell'accesso al sistema. Nel parametro umask viene utilizzato un valore numerico, che viene sottratto dalle autorizzazioni massime che possono essere impostate automaticamente per un file; l'impostazione massima per i file è 666, mentre per le directory è 777.
Tuttavia, ci sono alcune eccezioni a questa regola. È possibile trovare una panoramica completa delle impostazioni umask nella tabella qui sotto.
Dai numeri utilizzati in umask, così come nei casi degli argomenti numerici per il comando chmod, la prima cifra si riferisce alle autorizzazioni dell'utente, la seconda cifra si riferisce alle autorizzazioni del gruppo e l'ultima si riferisce alle autorizzazioni predefinite impostate per gli altri. Il valore umask predefinito 022 fornisce 644 per tutti i nuovi file e 755 per tutte le nuove directory create sul tuo server.
Panoramica completa di tutti i valori numerici umask e dei loro risultati nella tabella qui sotto.

Un modo semplice per vedere come funziona il parametro umask è il seguente: inizia con le autorizzazioni predefinite per un file impostato su 666 e sottrai umask per ottenere le autorizzazioni effettive. Fai lo stesso per una directory e le sue autorizzazioni predefinite 777.
Ci sono due modi per modificare l'impostazione di umask: per tutti gli utenti e per utenti singoli. Se desideri impostare umask per tutti gli utenti, devi assicurarti che il parametro umask venga preso in considerazione al momento dell'esecuzione dei file di ambiente della shell, come indicato in /etc/profile. L'approccio corretto è creare uno script della shell chiamato umask.sh nella directory /etc/profile.d e specificare umask che desideri utilizzare in questo script della shell. Se umask viene modificato in questo file, viene applicato a tutti gli utenti dopo l'accesso al server.
Un'alternativa all'impostazione di umask tramite /etc/profile e file correlati, dove si applica a tutti gli utenti che accedono al sistema, è modificare le impostazioni di umask in un file chiamato .profile, che viene creato nella home directory di ogni utente.
Le impostazioni applicate in questo file si applicano solo a un singolo utente; pertanto, questo è un buon metodo se hai bisogno di maggiore dettaglio. Personalmente, mi piace questa funzione per modificare il valore predefinito di umask per l'utente root su 027, mentre gli utenti normali lavorano con umask predefinito 022.
Lavorare con gli attributi estesi dell'utente
Questa è la sezione finale sui permessi in Linux.
Quando si lavora con i permessi, esiste sempre un collegamento tra l'oggetto utente o gruppo e i permessi che tali oggetti utente o gruppo hanno per un file o una directory. Un metodo alternativo per proteggere i file su un server Linux è lavorare con gli attributi.
Gli attributi funzionano indipendentemente dall'utente che accede al file.
Come nel caso delle ACL, potrebbe essere necessario abilitare l'opzione mount.
user_xattr . Se si riceve un messaggio "operazione non supportata" quando si lavora con gli attributi estesi dell'utente, assicurarsi di impostare l'opzionenel file /etc/fstab. mount Molti attributi sono documentati. Alcuni attributi sono disponibili, ma non sono ancora implementati. Non usarli; non porteranno nulla di utile.
Di seguito sono riportati gli attributi più utili che puoi applicare:
Questo attributo garantisce che l'ora di accesso al file non venga modificata.
A Di solito, ogni volta che un file viene aperto, l'ora di accesso deve essere registrata nei metadati del file. Ciò influisce negativamente sulle prestazioni; pertanto, per i file a cui si accede regolarmente, l'attributo
può essere utilizzato per disattivare questa funzione. A Questo attributo consente di aggiungere, ma non di rimuovere un file.
a Se utilizzi un filesystem che supporta la compressione a livello di volume, questo attributo garantisce che il file venga compresso al momento dell'attivazione del meccanismo di compressione.
c Questo attributo assicura che le modifiche ai file vengano scritte su disco immediatamente, piuttosto che prima nella cache. È un attributo utile per file di database critici, assicurando che non vengano persi tra la cache del file e il disco rigido.
D Questo attributo garantisce che il file non venga salvato nei backup in cui viene utilizzato lo strumento di dump.
d Questo attributo abilita l'indicizzazione per la directory in cui è attivato. Ciò garantisce un accesso più rapido ai file per filesystem primitivi come Ext3, che non utilizzano un database B-tree per l'accesso rapido ai file.
I Questo attributo abilita l'indicizzazione per la directory in cui è incluso. Ciò garantisce un accesso più rapido ai file per i sistemi di archiviazione primitivi, come Ext3, che non utilizzano un database B-tree per un accesso veloce ai file.
i Questo attributo rende il file immutabile. Di conseguenza, non è possibile apportare modifiche al file, il che è utile per i file che necessitano di una protezione aggiuntiva.
j Questo attributo garantisce che nel file system ext3 il file venga prima registrato nel journal e poi nei blocchi dati su disco rigido.
s Sovrascrivere i blocchi in cui il file era stato salvato con 0 dopo la cancellazione del file. Questo garantisce che il recupero del file sia impossibile dopo che è stato eliminato.
u Questo attributo conserva le informazioni sulla cancellazione. Ciò consente di sviluppare un'utilità che utilizza queste informazioni per recuperare file eliminati.
Se desideri applicare gli attributi, puoi utilizzare il comando chattr. Ad esempio, usa chattr +s somefile, per applicare gli attributi a somefile. Vuoi rimuovere un attributo? Allora usa chattr -s somefile, e verrà rimosso. Per avere una panoramica di tutti gli attributi attualmente applicati, usa il comando lsattr.
Riepilogo
In questo articolo hai appreso come lavorare con i permessi. Hai letto dei tre permessi principali, dei permessi estesi e di come applicare le liste ACL nel file system. Hai anche appreso come utilizzare il parametro umask per applicare i permessi predefiniti. Alla fine di questo articolo hai scoperto come utilizzare gli attributi estesi per applicare un ulteriore livello di sicurezza al file system.
Se ti è piaciuta questa traduzione, ti prego di farmelo sapere nei commenti. Ci sarebbe maggiore motivazione per fare traduzioni utili.
Nell'articolo ho corretto alcuni refusi e errori grammaticali. Ho ridotto alcuni paragrafi complessi in parti più piccole per facilitarne la lettura.
Ho corretto "Solo qualcuno con diritti amministrativi sulla directory può applicare il permesso di esecuzione." in "Solo qualcuno con diritti di scrittura sulla directory può applicare il permesso di esecuzione.", che è più corretto.
Grazie per i commenti .
Sostituito:
Se non sei il proprietario dell'utente, la shell verificherà se sei un membro del gruppo, che si chiama anche gruppo del file.In:
Se non sei il proprietario del file, la shell verificherà se sei membro del gruppo che ha le autorizzazioni per quel file. Se sei membro di quel gruppo, ottieni accesso al file con le autorizzazioni stabilite per il gruppo, e la shell interromperà il controllo.Grazie per il commento
Fonte: habr.com
