Ciao a tutti. Questo è un estratto da un articolo del libro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 e EX300.
Da parte mia: Spero che l'articolo possa essere utile non solo ai principianti, ma anche aiutare i sistemisti più esperti a organizzare le loro conoscenze.
Dunque, andiamo.

Per accedere ai file in Linux, si utilizzano i permessi. Questi permessi vengono assegnati a tre entità: il proprietario del file, il proprietario del gruppo e gli altri (cioè tutti gli altri). In questo articolo imparerai come applicare i permessi.
L'articolo inizia con una panoramica dei concetti di base, seguito da una discussione sui permessi speciali (Special permissions) e le liste di controllo accesso (ACL). Alla fine dell'articolo verrà trattata la configurazione dei permessi predefiniti tramite umask, oltre alla gestione degli attributi estesi dell'utente.
Gestione della proprietà dei file
Prima di discutere i permessi, devi conoscere il ruolo del proprietario di file e directory. La proprietà dei file e delle directory è fondamentale per gestire i permessi. In questa sezione, prima scoprirai come vedere il proprietario. Poi imparerai come cambiare il proprietario e il gruppo 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 stabiliti al momento della creazione del file o della directory. L'utente che crea un file diventa il proprietario di quel file, e il gruppo primario a cui appartiene quest'utente diventa anch'esso il proprietario di quel file. Per verificare se hai i diritti di accesso a un file o a una directory, la shell controlla la proprietà di essi.
Questo avviene nel seguente ordine:
- La shell verifica se sei il proprietario del file a cui desideri accedere. Se sei il proprietario, ottieni i permessi e la shell interrompe il controllo.
- Se non sei il proprietario del file, la shell verificherà se sei un membro del gruppo che ha i permessi su quel file. Se sei un membro di quel gruppo, puoi accedere al file con i permessi stabiliti per il gruppo e la shell smetterà di controllare.
- Se non sei né un utente né il proprietario del gruppo, ricevi i diritti di altri utenti (Other).
Per vedere 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 è indicato come proprietario questo utente o gruppo. A tal fine, puoi utilizzare find. L'argomento find -user può essere utilizzato a questo scopo. Ad esempio, il seguente comando mostra tutti i file di cui è proprietario l'utente linda:
find / -user lindaPuoi anche utilizzare find per trovare file di cui un determinato gruppo è il proprietario.
Ad esempio, il comando seguente cerca tutti i file appartenenti al gruppo users:
find / -group usersCambiamento del proprietario
Per applicare i permessi adeguati, la prima cosa da considerare è la proprietà. A tal fine, esiste il comando chown. La sintassi di questo comando è semplice da comprendere:
chown chi cosaAd esempio, il comando seguente cambia il proprietario della cartella /home/account in utente linda:
chown linda /home/accountTeam chown ha diverse opzioni, una delle quali è particolarmente utile: -R. Puoi immaginare cosa faccia, poiché questa opzione è disponibile anche per molti altri comandi. Consente di impostare ricorsivamente il proprietario, il che significa che puoi stabilire il proprietario della cartella corrente e di tutto ciò che si trova al suo interno. Il comando seguente cambia il proprietario per la cartella /home e per tutto ciò che si trova sotto di essa in utente linda:
Attualmente, 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 cartella 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à di un gruppo. Puoi farlo utilizzando chown, ma c'è un comando speciale chiamato chgrp, che svolge questo lavoro. Se vuoi utilizzare il comando chown, utilizza il . o : prima del nome del gruppo.
Il comando successivo cambia il proprietario del gruppo /home/account in gruppo account:
chown .account /home/account
Puoi utilizzare chown per cambiare il proprietario dell'utente e/o del gruppo in diversi modi. Ecco alcuni esempi:
- chown lisa myfile1 imposta l'utente lisa come proprietario del file myfile1.
- chown lisa.sales myfile imposta l'utente lisa come proprietario del file myfile e imposta anche il gruppo sales come proprietario dello stesso file.
- chown lisa:sales myfile è lo stesso del comando precedente.
- chown .sales myfile imposta 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. Considera il seguente esempio, dove puoi usare chgrp per impostare il gruppo sales come proprietario della directory account:
chgrp .sales /home/accountCome nel caso di chown, puoi utilizzare l'opzione -R con chgrp, e cambiare ricorsivamente il proprietario del gruppo.
Comprendere il proprietario predefinito
Potresti aver notato che quando un utente crea un file, si applica una gestione predefinita.
L'utente che crea il file diventa automaticamente il proprietario di quel file e il gruppo principale di quell'utente diventa automaticamente il proprietario di quel 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ò utilizzare il comando groups:
[root@server1 ~]# groups lisa
lisa : lisa account sales
Se l'utente corrente linda vuole cambiare il gruppo primario effettivo, deve usare 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 fino a quando l'utente non inserirà il comando exit o non uscirà dal sistema.
Di seguito è mostrato come l'utente linda utilizza questo comando, rendendo il gruppo sales il suo gruppo primario:
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 primario attivo, tutti i nuovi file creati dall'utente avranno questo gruppo come gruppo proprietario. Per tornare all'impostazione predefinita del gruppo primario, utilizzare exit.
Per poter utilizzare il comando newgrp, l'utente deve essere membro del gruppo che desidera utilizzare come primario. Inoltre, può essere utilizzata una password di gruppo per il gruppo tramite il comando gpasswd. Se l'utente utilizza il comando newgrp, ma non è membro del gruppo target, la shell chiede la password del gruppo. Una volta immessa la password del gruppo corretta, verrà impostato un nuovo gruppo primario efficace.
Gestione dei diritti primari
Il sistema di permessi Linux è stato inventato negli anni '70. Poiché le esigenze di calcolo erano limitate in quegli anni, il sistema di permessi di base era piuttosto restrittivo. Questo sistema utilizza tre permessi che possono essere applicati a file e directory. In questa sezione, imparerai come usare e modificare questi permessi.
Comprensione dei permessi di lettura, scrittura ed esecuzione
I tre permessi principali ti consentono di leggere, scrivere ed eseguire file. L'effetto di questi permessi varia se applicati a file o a directory. Nel caso di un file, il permesso di lettura ti permette di aprire il file per leggerlo. Pertanto, puoi leggere il suo contenuto, ma ciò significa anche che il tuo computer può aprire il file per eseguire operazioni su di esso.
Un file eseguibile che necessita di accesso a una libreria deve, ad esempio, avere il permesso di lettura su quella libreria. Da ciò si deduce che il permesso di lettura è il permesso più fondamentale di cui hai bisogno per lavorare con i file.
In riferimento al catalogo, la lettura consente di visualizzare il contenuto di questo catalogo. È importante sapere che questa autorizzazione non permette di leggere i file all'interno del catalogo. Il sistema di permessi di Linux non conosce l'ereditarietà e l'unico modo per leggere un file è avere i permessi di lettura su quel file.
Come probabilmente potete immaginare, il permesso di scrittura, se applicato a un file, consente di scrivere in quel file. In altre parole, consente di modificare il contenuto dei file esistenti. Tuttavia, non permette di creare o eliminare nuovi file o di modificare i permessi del file stesso. Per questo, è necessario concedere il permesso di scrittura alla directory in cui si desidera creare il file. In un catalogo, questo permesso consente anche di creare ed eliminare nuove sottodirectory.
Il permesso di esecuzione è ciò di cui hai bisogno per eseguire un file. Non sarà mai impostato di default, il che rende Linux praticamente immune ai virus. Solo qualcuno con diritti di scrittura sulla directory può applicare il permesso di esecuzione.
Di seguito è riportato un riepilogo dell'utilizzo dei permessi fondamentali:

Utilizzo di chmod
Per gestire i diritti, si utilizza il comando chmod. Quando utilizzi chmod puoi impostare le autorizzazioni per l'utente (user), il gruppo (group) e gli altri (other). Puoi utilizzare questo comando in due modalità: modalità relativa e modalità assoluta. In modalità assoluta, si usano tre cifre per impostare le autorizzazioni principali.

Quando configuri le autorizzazioni, calcola il valore necessario. Se desideri impostare lettura, scrittura ed esecuzione per l'utente, lettura ed esecuzione per il gruppo, e lettura ed esecuzione per gli altri nel file /somefile, utilizzi il seguente comando chmod:
chmod 755 /somefileQuando usi chmod in questo modo, tutte le autorizzazioni attuali vengono sostituite con quelle che hai impostato.
Se vuoi modificare le autorizzazioni in relazione alle autorizzazioni attuali, puoi usare chmod in modalità relativa. Quando usi chmod in modalità relativa, lavori con tre indicatori per indicare cosa vuoi fare:
- Per prima cosa, specifichi per chi vuoi modificare le autorizzazioni. A questo scopo, puoi scegliere tra l'utente (u), il gruppo (g) e gli altri (o).
- Dopo, utilizzi l'operatore per aggiungere o rimuovere permessi dallo stato corrente o per impostarli in modo assoluto.
- Alla fine, utilizzi r, w e x, per specificare quali permessi desideri impostare.
Quando modifichi i permessi in modalità relativa, puoi omettere parte di 'a chi' per aggiungere o rimuovere i permessi da tutti gli oggetti. Ad esempio, questo comando aggiunge il permesso di esecuzione a tutti gli utenti:
chmod +x somefileLavorando in modalità relativa, puoi anche utilizzare 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 directory, così come per i file nella directory /data. Per impostare il permesso di esecuzione solo per le directory e non per i file, utilizza chmod -R o+ rX /data.
L'impostazione del bit esecutivo S consente di garantire che i file non ottengano il permesso di esecuzione se il file non ha già impostato tale permesso per determinati oggetti. Questo rende X un modo più intelligente di gestire i permessi di esecuzione, evitando di applicare tale permesso a 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. Questi non sono i permessi che si impostano per impostazione predefinita, ma a volte forniscono un'aggiunta utile. In questa sezione scoprirai cosa sono e come configurarli.
Comprensione dei permessi avanzati SUID, GUID e sticky bit
Ci sono tre permessi avanzati. Il primo è il permesso di impostazione dell'identificativo utente (SUID). In alcune situazioni particolari, puoi applicare questo permesso ai file eseguibili. Per impostazione predefinita, l'utente che esegue il file eseguibile avvia il file con i propri permessi.
Per gli utenti comuni, questo significa generalmente che l'uso del programma è limitato. Tuttavia, in alcune situazioni, l'utente richiede permessi speciali per svolgere determinate attività.
Consideriamo, ad esempio, un caso in cui l'utente deve cambiare la password. Per farlo, l'utente deve scrivere la sua nuova password nel file /etc/shadow. Tuttavia, questo file non è scrivibile da parte degli utenti senza i diritti di accesso root:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow
Il permesso SUID offre una soluzione a questo problema. Nella utility /usr/bin/passwd, questo permesso è applicato per impostazione predefinita. Ciò significa che, quando cambia la password, l'utente ottiene temporaneamente i diritti di root, permettendogli di scrivere nel file /etc/shadow. Puoi vedere il permesso SUID in ls -l ZFS archivia i dati su disco. s nella posizione in cui ti aspetteresti di vedere x per i permessi utente:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd
Il permesso SUID può sembrare utile (e in alcuni casi lo è), ma può anche essere potenzialmente pericoloso. Se usato in modo improprio, potresti accidentalmente concedere diritti di accesso root. Pertanto, raccomando di utilizzarlo solo con la massima cautela.
La maggior parte degli amministratori non avrà mai bisogno di utilizzarlo; lo vedrai solo in alcuni file dove il sistema operativo deve impostarlo per impostazione predefinita.
Il secondo permesso speciale è l'ID di gruppo (SGID). Questo permesso ha due effetti. Applicato a un file eseguibile, concede all'utente che esegue il file i permessi del proprietario del gruppo di quel file. In questo modo, SGID può fare più o meno la stessa cosa di SUID. Tuttavia, per questo scopo, SGID è praticamente poco utilizzato.
Come nel caso del permesso SUID, SGID è applicato a determinati file di sistema come impostazione predefinita.
Quando si applica a una directory, SGID può essere utile, perché puoi usarlo per impostare il proprietario di gruppo predefinito per i file e le sottodirectory creati in quella directory. Per impostazione predefinita, quando un utente crea un file, il suo gruppo primario effettivo viene impostato come proprietario di gruppo per quel file.
Questo non è sempre molto utile, soprattutto perché gli utenti di Red Hat/CentOS hanno come gruppo primario un gruppo con lo stesso nome dell'utente, di cui l'utente è l'unico membro. Così, per impostazione predefinita, i file creati dall'utente saranno di gruppo per l'accesso comune.
Immagina una situazione in cui gli utenti linda e lori lavorano in contabilità e sono membri del gruppo account. Per impostazione predefinita, questi utenti sono membri di un gruppo privato, di cui sono gli unici membri. Tuttavia, entrambi gli utenti sono membri del gruppo account, ma anche come parametro di gruppo secondario.
La situazione predefinita è che quando uno di questi utenti crea un file, il gruppo principale diventa il proprietario. Pertanto, per impostazione predefinita, linda non può accedere ai file creati da lori e viceversa. Tuttavia, se crei una directory condivisa di 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 avranno anche l'account di gruppo come proprietario di gruppo per impostazione predefinita.
Per questo motivo, il permesso SGID è molto utile da impostare nelle directory di gruppi condivisi.
Il permesso SGID è mostrato nell'output ls -l ZFS archivia i dati su disco. 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 dalla cancellazione accidentale in un ambiente in cui più utenti hanno diritti di scrittura nella stessa cartella. Se è attivato il sticky bit, un utente può eliminare un file solo se è il proprietario del file o della cartella che lo contiene. Per questo motivo, è utilizzato come permesso predefinito per la cartella /tmp e può essere utile anche per le cartelle di gruppi condivisi.
Senza il sticky bit, se un utente può creare file in una cartella, può anche eliminarli. In un ambiente di gruppo pubblico, questo può risultare fastidioso. Immagina gli utenti linda e lori, che entrambi hanno diritti di scrittura nella cartella /data/account e ottengono questi permessi grazie alla loro appartenenza al gruppo account. Pertanto, linda può eliminare i file creati da lori e viceversa.
Quando applichi il sticky bit, un utente può eliminare i file solo se si verifica una delle seguenti condizioni:
- L'utente è il proprietario del file;
- L'utente è il proprietario della cartella in cui si trova il file.
Quando utilizzi ls -l, puoi vedere il bit sticky come t nella posizione in cui di solito vedi il permesso di esecuzione per gli altri:
[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/
Applicazione dei permessi avanzati
Per applicare SUID, SGID e il bit sticky, puoi anche utilizzare chmod. SUID ha il valore numerico 4, SGID ha il valore numerico 2 e il bit sticky ha il valore numerico 1.
Se desideri applicare questi permessi, devi aggiungere un argomento a quattro cifre in chmod, la prima cifra si riferisce ai permessi speciali. La seguente riga, ad esempio, aggiungerà il permesso SGID alla directory e imposterà rwx per l'utente e rx per il gruppo e gli altri:
chmod 2755 /somedirÈ piuttosto poco pratico se devi controllare i diritti attuali che sono impostati prima di lavorare con chmod in modalità assoluta. (Rischi di sovrascrivere i permessi se non lo fai.) Pertanto, consiglio di lavorare in modalità relativa se devi applicare uno dei permessi speciali:
- Per SUID usa chmod u+s.
- Per SGID usa chmod g+s.
- Per il bit sticky usa chmod +t, e poi il nome del file o della directory per cui vuoi impostare i permessi.
Nella tabella è riassunto tutto ciò che è importante sapere sulla gestione delle autorizzazioni speciali.

Esempio di lavoro con diritti speciali
In questo esempio utilizzi le autorizzazioni speciali per facilitare la condivisione di file da parte dei membri di un gruppo nella directory comune. Assegni il bit ID dell'identificatore del gruppo impostato e il bit sticky, e vedrai che dopo averli impostati, vengono aggiunte funzioni che semplificano la collaborazione tra i membri del gruppo.
- Apri il terminale in cui sei l'utente linda. Puoi creare un utente con il comando useradd linda, aggiungi una password passwd linda.
- Crea nella radice 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 membro del gruppo sales.
- Esegui cd /data/sales E da questa directory esegui ls -l. Vedrai 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 proprietà dell'utente lisa.
- Esegui su — per elevare i tuoi privilegi a livello root.
- Esegui chmod g+s,o+t /data/sales, per impostare il bit dell'identificatore del gruppo (GUID) e il bit sticky nella directory del gruppo condiviso.
- Esegui su — linda. Poi esegui touch linda3 e touch linda4. Ora dovresti vedere che i due file che hai creato appartengono al gruppo sales, che è il proprietario della directory /data/sales.
- Esegui rm -rf lisa*. Il bit sticky impedisce la rimozione di questi file da parte dell'utente linda, poiché non sei il proprietario di questi file. Tieni presente che se l'utente linda è il proprietario della directory /data/sales, può comunque eliminare questi file!
Gestione ACL (setfacl, getfacl) in Linux
Anche se i permessi estesi di cui si è discusso sopra aggiungono funzionalità utili a come Linux gestisce i permessi, non ti permette di concedere permessi a più di un utente o di un gruppo in un file.
Le liste di controllo degli accessi offrono questa funzionalità. Inoltre, consentono agli amministratori di impostare permessi predefiniti in un modo complesso, dove i permessi impostati possono variare in diverse directory.
Comprendere le ACL
Anche se il sottosistema ACL aggiunge eccellenti funzionalità al tuo server, ha un difetto: non tutti gli strumenti lo supportano. Di conseguenza, potresti perdere le impostazioni ACL quando copi o sposti file, e il software di backup potrebbe non eseguire il backup delle impostazioni ACL.
Lo strumento tar non supporta le ACL. Per garantire che le impostazioni ACL non vengano perse durante il backup, utilizza star invece di tar. star Funziona con gli stessi parametri di tar; aggiunge semplicemente il supporto per le impostazioni ACL.
Puoi anche eseguire il backup delle ACL utilizzando getfacl, che può essere ripristinato con il comando setfacl. Per eseguire il backup, utilizza getfacl -R /directory > file.acls. Per ripristinare le impostazioni dal file di backup, utilizza setfacl --restore=file.acl.
L'assenza di supporto da parte di alcuni strumenti non dovrebbe rappresentare un problema. Le liste ACL sono spesso applicate alle directory come misura strutturale, piuttosto che a singoli file.
Pertanto, ce ne saranno solo poche, applicate in posti strategici del file system. Di conseguenza, ripristinare le liste ACL originali con cui hai lavorato è relativamente facile, anche se il tuo software di backup non le supporta.
Preparazione del file system per le ACL
Prima di iniziare a lavorare con le ACL, potrebbe essere necessario preparare il file system per supportarle. Poiché i metadati del file system devono essere estesi, non è sempre disponibile il 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 mancare il supporto per le ACL nel tuo file system.
Per risolvere questo problema, devi aggiungere l'opzione acl mount nel file /etc/fstab, affinché il file system sia montato con il supporto per le ACL per impostazione predefinita.
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, è necessario getfacl. Comando ls -l non mostra alcuna ACL esistente; indica solo un + dopo l'elenco delle autorizzazioni che indica che gli ACL sono applicati al file.
Prima di configurare le liste ACL, è sempre utile mostrare le attuali impostazioni ACL usando getfacl. Di seguito nell'esempio puoi vedere i diritti di accesso correnti come mostrato con ls -l, così come mostrato con getfacl. Se guardi abbastanza attentamente, vedrai che le informazioni mostrate sono esattamente le stesse.
[root@server1 /]# ls -ld /dir
drwxr-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
A seguito dell'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 ed 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 questo g:sales:rx informa il comando di impostare l'ACL per la lettura e l'esecuzione (rx) per il gruppo (g) vendite. Qui puoi vedere come appare il gruppo, insieme all'output del comando getfacl dopo aver modificato le attuali impostazioni ACL.
[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Rimozione '/' all'inizio dei 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 fornisce permessi all'utente linda nella cartella /data, senza renderlo proprietario e senza modificare l'attuale assegnazione del proprietario.
Team setfacl ha molte funzionalità e opzioni. Un'opzione particolarmente importante è il parametro -R. Se utilizzata, l'opzione configura l'ACL per tutti i file e le sottocartelle attualmente esistenti nella cartella in cui si imposta l'ACL. È consigliabile utilizzare sempre questa opzione quando si modificano le liste ACL per cartelle esistenti.
Lavorare con ACL di default
Uno dei vantaggi dell'uso delle liste ACL è che puoi concedere permessi a più utenti o gruppi nella cartella. Un altro vantaggio è che puoi abilitare l'ereditarietà, lavorando con l'ACL di default.
Impostando l'ACL predefinito, definirai i permessi che saranno applicati a tutti i nuovi elementi creati nella directory. Tieni presente che l'ACL predefinito non modifica i permessi dei file e delle sottodirectory esistenti. Per modificarli, è necessario aggiungere anche un'ACL normale!
È importante sapere. Se desideri utilizzare l'ACL per configurare l'accesso di più utenti o gruppi alla stessa directory, devi impostare l'ACL due volte. Prima utilizza setfacl -R -m, per modificare l'ACL per i file attuali. Poi utilizza setfacl -m d:, per gestire tutti i nuovi elementi che verranno 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 sarà mai creato nella directory /data.
Quando si utilizzano le liste ACL predefinite, può essere utile anche impostare l'ACL per gli altri. Di solito, questo non ha molto senso, perché puoi anche modificare i permessi per gli altri utilizzando chmod. Tuttavia, ciò che non puoi fare è chmod, specificare i diritti che devono essere concessi ad altri utenti per ogni nuovo file che verrà creato. Se desideri che gli altri non ricevano alcun permesso per nulla di creato in /data, ad esempio, usa setfacl -m d:o::- /data.
Le ACL e i permessi tradizionali non sono sempre bene integrate. Possono sorgere problemi se hai applicato le ACL predefinite a una directory e poi sono stati aggiunti elementi a quella directory, e successivamente provi a cambiare i permessi tradizionali. Le modifiche applicate ai permessi tradizionali non si rifletteranno bene nella revisione delle ACL. Per evitare problemi, imposta prima i permessi tradizionali, poi imposta le ACL predefinite (e dopo cerca di non cambiarle di nuovo).
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 abbia i permessi su /data/sales e che il gruppo account abbia i permessi su /data/account.
Iniziate assicurandovi che il gruppo account abbia i permessi di lettura nella directory /data/sales e che il gruppo sales abbia i permessi di lettura nella directory /data/account.
Poi imposterete le ACL predefinite per assicurarvi che per tutti i nuovi file i permessi siano correttamente impostati per ogni nuovo elemento.
- Aprite il terminale.
- Esegui setfacl -m g:account:rx /data/sales e setfacl -m g:sales:rx /data/account.
- Esegui getfacl, per assicurarvi che i diritti di accesso siano stati impostati come desideravate.
- Esegui setfacl -m d:g:account:rwx,g:sales:rx /data/sales, per stabilire le ACL predefinite per la directory sales.
- Aggiungete l'ACL predefinita per la directory /data/account, usando setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Assicuratevi che le impostazioni delle ACL siano attive aggiungendo un nuovo file in /data/sales. Eseguite touch /data/sales/newfile e poi eseguite getfacl /data/sales/newfile per controllare i permessi attuali.
Impostare i permessi predefiniti con umask
Sopra avete imparato come lavorare con le ACL predefinite. Se non usate le ACL, c'è un'opzione della shell che definisce i diritti predefiniti che avrete: umask (maschera inversa). In questa sezione imparerete come modificare i permessi predefiniti usando umask.
È probabile che tu abbia notato che quando crei un nuovo file, vengono impostate alcune autorizzazioni predefinite. Queste autorizzazioni sono determinate dalla configurazione umask. Questa impostazione della shell si applica a tutti gli utenti al momento del login. Nell'impostazione umask si utilizza un valore numerico che viene sottratto dalle autorizzazioni massime che possono essere impostate automaticamente per il file; l'impostazione massima per i file è 666, mentre per le directory è 777.
Tuttavia, ci sono alcune eccezioni a questa regola. Puoi trovare una panoramica completa delle impostazioni umask nella tabella qui sotto.
Dai numeri utilizzati in umask, come nel caso 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 dà 644 per tutti i nuovi file e 755 per tutte le nuove directory create nel tuo server.
Una 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 i permessi predefiniti per un file impostati su 666 e sottrai umask per ottenere i permessi effettivi. Fai la stessa cosa per una directory e i suoi permessi predefiniti 777.
Ci sono due modi per modificare l'impostazione di umask: per tutti gli utenti e per singoli utenti. Se vuoi impostare umask per tutti gli utenti, devi assicurarti che il parametro umask venga considerato all'avvio dei file di ambiente della shell, come indicato in /etc/profile. L'approccio corretto è creare uno script di shell chiamato umask.sh nella directory /etc/profile.d e specificare l'umask che desideri utilizzare in questo script di shell. Se umask viene modificato in questo file, si applica a tutti gli utenti dopo aver effettuato l'accesso al server.
Un'alternativa alla configurazione di umask tramite /etc/profile e file collegati, dove viene applicato a tutti gli utenti che accedono al sistema, è modificare le impostazioni di umask nel 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, è un buon metodo se hai bisogno di maggiori dettagli. Personalmente, mi piace questa funzione per cambiare il valore di umask predefinito per l'utente root a 027, mentre gli utenti normali lavorano con umask predefinito 022.
Lavorare con gli attributi estesi dell'utente
Questa è l'ultima sezione sui permessi in Linux.
Quando si lavora con i permessi, esiste sempre una connessione tra l'oggetto utente o il gruppo e i permessi che questi 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 degli ACL, potrebbe essere necessario abilitare l'opzione mount.
user_xattr . Se ricevi un messaggio «operazione non supportata» durante il lavoro con gli attributi estesi dell'utente, assicurati di impostare l'opzionenel file /etc/fstab. mount nel file /etc/fstab.
Molti attributi sono documentati. Alcuni attributi sono disponibili, ma non ancora implementati. Non utilizzarli; non ti porteranno alcun vantaggio.
Di seguito sono elencati gli attributi più utili che puoi applicare:
A Questo attributo garantisce che il tempo di accesso al file non venga modificato.
Di solito, ogni volta che un file viene aperto, il tempo di accesso deve essere registrato nei metadati del file. Questo influisce negativamente sulle prestazioni; pertanto, per i file a cui si accede frequentemente, l'attributo A può essere utilizzato per disabilitare questa funzione.
a Questo attributo consente di aggiungere, ma non di rimuovere un file.
c Se utilizzi un file system che supporta la compressione a livello di volume, questo attributo garantisce che il file venga compresso al primo attivamento del meccanismo di compressione.
D Questo attributo garantisce che le modifiche ai file vengano scritte immediatamente su disco, invece di essere prima memorizzate nella cache. Questo è un attributo utile per file di database critici, che garantisce 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 quando viene utilizzato lo strumento di dump.
I Questo attributo abilita l'indicizzazione per la directory in cui è attivato. Ciò assicura un accesso più rapido ai file per i filesystem primitivi come Ext3, che non utilizzano un database B-tree per l'accesso veloce ai file.
i Questo attributo rende il file immutabile. Pertanto, non possono essere apportate modifiche al file, il che è utile per file che necessitano di ulteriore protezione.
j Questo attributo garantisce che nel filesystem ext3 il file venga prima registrato nel journal e poi nei blocchi dati sul disco rigido.
s Sovrascrivere i blocchi in cui il file è stato salvato con 0 dopo l'eliminazione del file. Questo garantisce che il recupero del file sia impossibile dopo che è stato eliminato.
u Questo attributo conserva le informazioni sull'eliminazione. Ciò consente di sviluppare un'utilità che lavora con queste informazioni per recuperare file eliminati.
Se desideri applicare gli attributi, puoi utilizzare il comando chattr. Ad esempio, utilizza chattr +s somefile, per applicare gli attributi a somefile. Vuoi rimuovere l'attributo? Allora utilizza chattr -s somefile, e sarà rimosso. Per ottenere una panoramica di tutti gli attributi attualmente applicati, utilizza il comando lsattr.
Riepilogo
In questo articolo hai imparato come gestire i permessi. Hai letto dei tre permessi fondamentali, dei permessi estesi e di come applicare le liste ACL nel filesystem. Hai anche scoperto come utilizzare il parametro umask per applicare i permessi di default. Alla fine di questo articolo, hai imparato come utilizzare gli attributi estesi per applicare un ulteriore livello di sicurezza al filesystem.
Se ti è piaciuta questa traduzione, ti prego di farcelo sapere nei commenti. Ci darà più motivazione a fare traduzioni utili.
Nell'articolo ho corretto alcuni errori di battitura e grammaticali. Ho ridotto alcuni paragrafi lunghi in parti più brevi per facilitarne la lettura.
Ho sostituito "Solo chi ha diritti di amministrazione sulla directory può applicare il permesso di esecuzione." con "Solo chi ha diritti di scrittura sulla directory può applicare il permesso di esecuzione.", che è più corretto.
Grazie per il feedback .
Sostituito:
Se non sei il proprietario dell'utente, la shell controllerà se sei un membro del gruppo, che si chiama anche gruppo del file.A:
Se non sei il proprietario del file, la shell verificherà se sei un membro del gruppo che ha i permessi su quel file. Se sei un membro di quel gruppo, puoi accedere al file con i permessi stabiliti per il gruppo e la shell smetterà di controllare.Grazie per il commento
Fonte: habr.com
