Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Ciao a tutti. Questa è una traduzione di un articolo dal libro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300.

Da me stesso: Spero che l'articolo sia utile non solo ai principianti, ma aiuti anche gli amministratori più esperti a semplificare le proprie conoscenze.

Allora, andiamo.

Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Per accedere ai file in Linux, vengono utilizzate le autorizzazioni. Queste autorizzazioni vengono assegnate a tre oggetti: il proprietario del file, il proprietario del gruppo e un altro oggetto (ovvero tutti gli altri). In questo articolo imparerai come applicare le autorizzazioni.

Questo articolo inizia con una panoramica dei concetti di base, seguita da una discussione sulle autorizzazioni speciali e sugli elenchi di controllo di accesso (ACL). Alla fine di questo articolo, tratteremo l'impostazione delle autorizzazioni predefinite tramite umask, nonché la gestione degli attributi utente estesi.

Gestione della proprietà dei file

Prima di discutere delle autorizzazioni, dovresti essere consapevole del ruolo del proprietario di file e directory. La proprietà di file e directory è fondamentale per gestire le autorizzazioni. In questa sezione imparerai innanzitutto come visualizzare il proprietario. Imparerai quindi come modificare il proprietario del gruppo e l'utente per file e directory.

Visualizzazione del proprietario di un file o di una directory

In Linux, ogni file e ogni directory ha due proprietari: un utente e un proprietario del gruppo.

Questi proprietari vengono impostati quando viene creato un file o una directory. L'utente che crea il file diventa il proprietario di quel file e anche il gruppo principale a cui appartiene lo stesso utente diventa il proprietario di quel file. Per determinare se tu, come utente, hai il permesso di accedere a un file o una directory, la shell ne verifica la proprietà.

Ciò avviene nel seguente ordine:

  1. La shell verifica se sei il proprietario del file a cui desideri accedere. Se sei il proprietario, ti vengono concesse le autorizzazioni e la shell smette di controllare.
  2. Se non sei il proprietario del file, la shell controllerà se sei membro di un gruppo che dispone dei permessi sul file. Se sei un membro di questo gruppo, accederai al file con le autorizzazioni impostate dal gruppo e la shell smetterà di controllare.
  3. Se non sei né un utente né il proprietario di un gruppo, ti vengono concessi i diritti degli altri utenti (Altro).

Per visualizzare le assegnazioni del proprietario corrente, 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

Con il comando ls puoi visualizzare il proprietario dei file in una determinata directory. A volte può essere utile ottenere un elenco di tutti i file sul sistema che hanno un determinato utente o gruppo come proprietario. Per questo puoi usare Find. Discussione trova-utente può essere utilizzato per questo scopo. Ad esempio, il comando seguente elenca tutti i file di proprietà dell'utente linda:

find / -user linda

также можете использовать Find per cercare file che hanno un determinato gruppo come proprietario.

Ad esempio, il comando seguente cerca tutti i file appartenenti al gruppo utenti:

find / -group users

Cambio proprietario

Per applicare le autorizzazioni appropriate, la prima cosa da considerare è la proprietà. C'è un comando per questo chown. La sintassi di questo comando è di facile comprensione:

chown кто что

Ad esempio, il comando seguente modifica il proprietario della directory /home/account nell'utente linda:

chown linda /home/account

Squadra chown ha diverse opzioni, una delle quali è particolarmente utile: -R. Puoi indovinare cosa fa perché questa opzione è disponibile anche per molti altri comandi. Ciò ti consente di impostare in modo ricorsivo il proprietario, che ti consente di impostare il proprietario della directory corrente e tutto ciò che segue. Il seguente comando cambia la proprietà della directory /home e di tutto ciò che si trova sotto all'utente linda:

Ora i proprietari appaiono 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

Facciamo:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Ora l'utente lisa è diventato il proprietario della directory dell'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

Modificare il proprietario di un gruppo

Esistono due modi per modificare la proprietà di un gruppo. Puoi farlo usando chown, ma esiste un comando speciale chiamato chgrpquesto fa il lavoro. Se vuoi usare il comando chown, utilizzo . o : prima del nome del gruppo.

Il comando seguente modifica qualsiasi proprietario del gruppo /home/account nel gruppo di account:

chown .account /home/account

Puoi usare chown per modificare il proprietario di un utente e/o gruppo in diversi modi. Ecco alcuni esempi:

  • chown lisa miofile1 imposta l'utente lisa come proprietario di miofile1.
  • chown lisa.sales il miofile imposta l'utente lisa come proprietario del file myfile e imposta anche il gruppo di vendita come proprietario dello stesso file.
  • chown lisa:vendite miofile lo stesso della squadra precedente.
  • chown .sales miofile imposta il gruppo di vendita come proprietario di miofile senza modificare il proprietario dell'utente.
  • chown:venditemiofile lo stesso della squadra precedente.

Puoi usare il comando chgrpper cambiare il proprietario del gruppo. Considera il seguente esempio, dove puoi usare chgrp Imposta il proprietario della directory dell'account sul gruppo di vendita:

chgrp .sales /home/account

Come nel caso di chown, puoi utilizzare l'opzione -R с chgrp, nonché modificare ricorsivamente il proprietario del gruppo.

Comprendere il proprietario predefinito

Potresti aver notato che quando un utente crea un file, viene applicata la proprietà predefinita.
L'utente che crea il file diventa automaticamente il proprietario del file e il gruppo primario di quell'utente diventa automaticamente il proprietario del file. Solitamente si tratta del gruppo elencato nel file /etc/passwd come gruppo primario dell'utente. Tuttavia, se l'utente è membro di più di un gruppo, può modificare il gruppo primario effettivo.

Per mostrare l'attuale gruppo primario effettivo, l'utente può utilizzare il comando gruppi:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Se l'attuale utente Linda desidera modificare il gruppo primario effettivo, utilizzerà il comando newgrpseguito dal nome del gruppo che vuole impostare come nuovo gruppo primario effettivo. Dopo aver utilizzato il comando newgrp il gruppo primario sarà attivo finché l'utente non immette il comando exit o non disconnettersi.

Di seguito viene mostrato come l'utente linda utilizza questo comando, con le vendite come gruppo principale:

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 corrente, tutti i nuovi file creati dall'utente avranno quel gruppo come proprietario del gruppo. Per ripristinare l'impostazione del gruppo primario originale, utilizza exit.

Per poter utilizzare il comando newgrp, l'utente deve essere un membro del gruppo che desidera utilizzare come gruppo principale. Inoltre, è possibile utilizzare una password di gruppo per un gruppo utilizzando il comando gpasswd. Se l'utente utilizza il comando newgrpma non è un membro del gruppo target, la shell richiede la password del gruppo. Dopo aver inserito la password del gruppo corretta, verrà stabilito un nuovo gruppo primario effettivo.

Gestione dei diritti fondamentali

Il sistema di permessi di Linux è stato inventato negli anni '1970. Poiché in quegli anni le esigenze informatiche erano limitate, il sistema di permessi di base era piuttosto limitato. Questo sistema di permessi utilizza tre permessi che possono essere applicati a file e directory. In questa sezione imparerai come utilizzare e modificare queste autorizzazioni.

Comprendere i permessi di lettura, scrittura ed esecuzione

Tre autorizzazioni di base ti consentono di leggere, scrivere ed eseguire file. L'effetto di queste autorizzazioni differisce quando applicate a file o directory. Per un file, l'autorizzazione di lettura ti dà il diritto di aprire il file per la lettura. Pertanto, puoi leggerne il contenuto, ma ciò significa che il tuo computer può aprire il file per farci qualcosa.

Un file di programma che necessita dell'accesso a una libreria deve, ad esempio, avere accesso in lettura a quella libreria. Ne consegue che il permesso di lettura è il permesso più basilare necessario per lavorare con i file.

Quando applicata a una directory, la lettura consente di visualizzare il contenuto di quella directory. Dovresti essere consapevole che questa autorizzazione non ti consente di leggere i file nella directory. Il sistema di permessi di Linux non conosce l'ereditarietà e l'unico modo per leggere un file è utilizzare i permessi di lettura su quel file.

Come probabilmente puoi immaginare, il permesso di scrittura, se applicato a un file, consente di scrivere sul file. In altre parole, ti consente di modificare il contenuto dei file esistenti. Tuttavia, non consente di creare o eliminare nuovi file o modificare le autorizzazioni dei file. Per fare ciò, devi dare il permesso di scrittura alla directory in cui vuoi creare il file. Nelle directory, questa autorizzazione consente anche di creare ed eliminare nuove sottodirectory.

Il permesso di esecuzione è ciò di cui hai bisogno per eseguire il file. Non verrà mai installato per impostazione predefinita, il che rende Linux quasi completamente immune ai virus. Solo qualcuno con accesso in scrittura alla directory può applicare l'autorizzazione di esecuzione.

Di seguito viene riepilogato l'utilizzo delle autorizzazioni di base:

Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Usando chmod

Il comando viene utilizzato per gestire le autorizzazioni. chmod... Usando chmod è possibile impostare le autorizzazioni per l'utente (utente), i gruppi (gruppo) e altri (altro). È possibile utilizzare questo comando in due modalità: modalità relativa e modalità assoluta. In modalità assoluta, vengono utilizzate tre cifre per impostare le autorizzazioni di base.

Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Quando imposti le autorizzazioni, calcola il valore che ti serve. Se vuoi impostare lettura/scrittura/esecuzione per l'utente, lettura/esecuzione per il gruppo e lettura/esecuzione per gli altri in /somefile, utilizza il seguente comando chmod:

chmod 755 /somefile

Quando usi chmod in questo modo, tutti i permessi correnti vengono sostituiti dai permessi impostati.

Se desideri modificare le autorizzazioni relative alle autorizzazioni attuali, puoi utilizzare chmod in modalità relativa. Utilizzando chmod in modalità relativa lavori con tre indicatori per indicare cosa vuoi fare:

  1. Per prima cosa specifichi per chi vuoi modificare le autorizzazioni. Per fare ciò, puoi scegliere tra utente (u), gruppo (g) e altri (o).
  2. Quindi utilizzi un'istruzione per aggiungere o rimuovere le autorizzazioni dalla modalità corrente o impostarle in modo assoluto.
  3. Alla fine usi r, w и xper specificare quali autorizzazioni desideri impostare.

Quando modifichi le autorizzazioni in modalità relativa, puoi saltare la parte "a" per aggiungere o rimuovere le autorizzazioni per tutti gli oggetti. Ad esempio, questo comando aggiunge l'autorizzazione di esecuzione per tutti gli utenti:

chmod +x somefile

Quando lavori in modalità relativa, puoi anche utilizzare comandi più complessi. Ad esempio, questo comando aggiunge l'autorizzazione di scrittura a un gruppo e rimuove l'autorizzazione di lettura per gli altri:

chmod g+w,o-r somefile

Quando si utilizza la chmod -R o+rx /data imposti l'autorizzazione di esecuzione per tutte le directory e per i file nella directory /data. Per impostare il permesso di esecuzione solo per le directory e non per i file, utilizzare chmod -R o+ rX /data.

La X maiuscola garantisce che i file non ottengano l'autorizzazione di esecuzione a meno che il file non abbia già impostato l'autorizzazione di esecuzione per alcuni oggetti. Ciò rende X un modo più intelligente di gestire i permessi di esecuzione; ciò eviterà di impostare questa autorizzazione sui file in cui non è necessaria.

Diritti estesi

Oltre alle autorizzazioni di base di cui hai appena letto, Linux dispone anche di una serie di autorizzazioni avanzate. Queste non sono le autorizzazioni impostate per impostazione predefinita, ma a volte forniscono un'utile aggiunta. In questa sezione imparerai cosa sono e come configurarli.

Comprensione delle autorizzazioni estese SUID, GUID e Sticky Bit

Sono disponibili tre autorizzazioni avanzate. Il primo di questi è il permesso di impostare un identificatore utente (SUID). In alcuni casi speciali, puoi applicare questa autorizzazione ai file eseguibili. Per impostazione predefinita, un utente che esegue un eseguibile esegue quel file con le proprie autorizzazioni.

Per gli utenti ordinari, questo di solito significa che l'uso del programma è limitato. Tuttavia, in alcuni casi, l'utente necessita di autorizzazioni speciali, solo per eseguire un'attività specifica.

Consideriamo, ad esempio, una situazione in cui un utente deve modificare la propria password. Per fare ciò, l'utente deve scrivere la nuova password nel file /etc/shadow. Tuttavia, questo file non è scrivibile da utenti non 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. L'utilità /usr/bin/passwd utilizza questa autorizzazione per impostazione predefinita. Ciò significa che quando si modifica la password, l'utente diventa temporaneamente root, il che gli consente di scrivere nel file /etc/shadow. Puoi vedere l'autorizzazione SUID con ls -l come s in una posizione dove normalmente ti aspetteresti di vedere x per autorizzazioni personalizzate:

[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 allo stesso tempo è potenzialmente pericoloso. Se non applicato correttamente, potresti cedere accidentalmente i permessi di root. Pertanto consiglio di utilizzarlo solo con la massima cura.

La maggior parte degli amministratori non avrà mai bisogno di utilizzarlo; lo vedrai solo in alcuni file in cui il sistema operativo dovrebbe impostarlo di default.

La seconda autorizzazione speciale è l'ID gruppo (SGID). Questa autorizzazione ha due effetti. Quando applicato a un file eseguibile, fornisce all'utente che sta eseguendo il file le autorizzazioni del proprietario del gruppo di quel file. Quindi SGID può fare più o meno la stessa cosa del SUID. Tuttavia, SGID è difficilmente utilizzato per questo scopo.

Come per l'autorizzazione SUID, SGID viene applicato ad alcuni file di sistema come impostazione predefinita.

Quando applicato a una directory, SGID può essere utile perché puoi utilizzarlo per impostare il proprietario del 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 del gruppo per quel file.

Ciò non è sempre molto utile, soprattutto perché gli utenti Red Hat/CentOS hanno il gruppo primario impostato su un gruppo con lo stesso nome dell'utente e di cui l'utente è l'unico membro. Pertanto, per impostazione predefinita, i file creati dall'utente verranno condivisi in blocco.

Immagina una situazione in cui gli utenti Linda e Lori lavorano nella contabilità e sono membri di un gruppo conto. 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 di account, ma anche come parametro del gruppo secondario.

La situazione predefinita è che quando uno di questi utenti crea un file, il gruppo principale ne diventa il proprietario. Pertanto, per impostazione predefinita, Linda non può accedere ai file creati da Lori e viceversa. Tuttavia, se crei una directory di gruppo condivisa (ad esempio /groups/account) e ti assicuri che l'autorizzazione SGID sia applicata a quella directory e che l'account del gruppo sia impostato come proprietario del gruppo per quella directory, tutti i file creati in quella directory e tutti delle sue sottodirectory, ottieni anche l'account di gruppo come proprietario del gruppo per impostazione predefinita.

Per questo motivo, il permesso SGID è un permesso molto utile da impostare sulle directory dei gruppi pubblici.

L'autorizzazione SGID viene visualizzata nell'output ls -l come s nella posizione in cui normalmente troveresti il ​​permesso di eseguire un gruppo:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

La terza delle autorizzazioni speciali è la parte appiccicosa. Questa autorizzazione è utile per proteggere i file dall'eliminazione accidentale in un ambiente in cui più utenti hanno accesso in scrittura alla stessa directory. Se viene utilizzato uno sticky bit, un utente può eliminare un file solo se è l'utente proprietario del file o della directory che contiene il file. Per questo motivo viene utilizzato come permesso predefinito per la directory /tmp e può essere utile anche per le directory dei gruppi pubblici.

Senza lo sticky bit, se l'utente può creare file in una directory, può anche eliminare file da quella directory. In un ambiente di gruppo pubblico, questo può essere fastidioso. Immagina gli utenti linda e lori, che hanno entrambi i permessi di scrittura sulla directory /data/account e ottengono tali permessi essendo membri del gruppo di account. Pertanto, Linda può eliminare i file creati da Lori e viceversa.

Quando applichi lo sticky bit, l'utente può eliminare i file solo se è vera una delle seguenti condizioni:

  • L'utente è il proprietario del file;
  • L'utente è il proprietario della directory in cui si trova il file.

Quando si utilizza la ls -l, puoi vedere un po 'appiccicoso come t nella posizione in cui normalmente vedresti 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 diritti estesi

Per applicare SUID, SGID e sticky bit puoi anche usare chmod. SUID ha un valore numerico pari a 4, SGID ha un valore numerico pari a 2 e lo sticky bit ha un valore numerico pari a 1.

Se vuoi applicare queste autorizzazioni, devi aggiungere un argomento a quattro cifre a chmod, la cui prima cifra si riferisce ad autorizzazioni speciali. La riga seguente, ad esempio, aggiungerà l'autorizzazione SGID alla directory e imposterà rwx per utente e rx per gruppo e altri:

chmod 2755 /somedir

Questo è piuttosto poco pratico se hai bisogno di vedere le autorizzazioni correnti impostate prima di lavorarci chmod in modalità assoluta. (Se non lo fai corri il rischio di sovrascrivere le autorizzazioni.) Quindi ti consiglio di eseguire in modalità relativa se devi applicare una qualsiasi delle autorizzazioni speciali:

  1. Per uso SUID chmod u+s.
  2. Per uso SGID chmod sol+s.
  3. Per l'uso con punte adesive chmod + t, seguito dal nome del file o della directory per cui desideri impostare le autorizzazioni.

La tabella riassume tutto ciò che devi sapere sulla gestione dei permessi speciali.

Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Esempio di lavoro con diritti speciali

In questo esempio si utilizzano autorizzazioni speciali per rendere più semplice per i membri del gruppo condividere file nella directory del gruppo condiviso. Assegni il bit ID all'ID del gruppo impostato nonché allo sticky bit e vedi che una volta impostati, le funzionalità vengono aggiunte per rendere più semplice la collaborazione dei membri del gruppo.

  1. Apri un terminale in cui sei l'utente Linda. È possibile creare un utente con il comando Linda, aggiungi la password password Linda.
  2. Crea una directory /data nella root e una sottodirectory /data/sales con il comando mkdir -p /dati/vendite. Completare cd /dati/venditeper andare alla directory delle vendite. Completare tocca Linda1 и tocca Linda2per creare due file vuoti di proprietà di linda.
  3. seguire su-lisa per cambiare l'utente corrente nell'utente lisa, che è anche membro del gruppo di vendita.
  4. seguire cd /dati/vendite e da quella directory eseguire ls -l. Vedrai due file che sono stati creati dall'utente linda e appartengono al gruppo linda. Eseguire rm -f linda*. Questo eliminerà entrambi i file.
  5. seguire tocca lisa1 и tocca lisa2per creare due file di proprietà dell'utente lisa.
  6. seguire su- per elevare i tuoi privilegi a root.
  7. seguire chmod g+s,o+t /data/salesper impostare il bit dell'identificatore di gruppo (GUID) e lo sticky bit nella directory del gruppo condiviso.
  8. seguire su-linda. Quindi fa tocca Linda3 и tocca Linda4. Ora dovresti vedere che i due file che hai creato sono di proprietà del gruppo vendite, che è il proprietario del gruppo della directory /data/sales.
  9. seguire rm -rf lisa*. Lo sticky bit impedisce che questi file vengano eliminati per conto 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 discussi sopra aggiungono funzionalità utili al modo in cui Linux gestisce i permessi, non consentono di concedere permessi a più di un utente o gruppo nello stesso file.

Gli elenchi di controllo degli accessi offrono questa funzionalità. Inoltre, consentono agli amministratori di impostare le autorizzazioni predefinite in modo complesso, dove le autorizzazioni impostate possono variare da directory a directory.

Comprendere gli ACL

Sebbene il sottosistema ACL aggiunga grandi funzionalità al tuo server, presenta uno svantaggio: non tutte le utilità lo supportano. Pertanto, potresti perdere le impostazioni ACL quando copi o sposti file e il software di backup potrebbe non riuscire a eseguire il backup delle impostazioni ACL.

L'utilità tar non supporta gli ACL. Per assicurarti che le impostazioni ACL non vadano perse quando crei un backup, utilizza stella al posto del catrame. stella funziona con le stesse opzioni di tar; aggiunge semplicemente il supporto per le impostazioni ACL.

Puoi anche eseguire il backup degli ACL con ottenere, che può essere ripristinato utilizzando il comando setfacl. Per creare un backup, utilizzare getfacl -R /directory > file.acls. Per ripristinare le impostazioni da un file di backup, utilizzare setfacl --restore=file.acl.

La mancanza di supporto da parte di alcuni strumenti non dovrebbe essere un problema. Le ACL vengono spesso applicate alle directory come misura strutturale piuttosto che ai singoli file.
Pertanto, non ce ne saranno molti, ma solo alcuni, applicati in punti intelligenti del file system. Pertanto, ripristinare gli ACL originali con cui hai lavorato è relativamente semplice, anche se il tuo software di backup non li supporta.

Preparazione del file system per gli ACL

Prima di iniziare a lavorare con le ACL, potrebbe essere necessario preparare il file system per supportare le ACL. Poiché i metadati del file system devono essere estesi, non sempre è disponibile il supporto predefinito per gli ACL nel file system. Se ricevi il messaggio "Operazione non supportata" durante la configurazione degli ACL per un file system, il tuo file system potrebbe non supportare gli ACL.

Per risolvere questo problema è necessario aggiungere l'opzione supporto ACL in /etc/fstab in modo che il filesystem sia montato con il supporto ACL per impostazione predefinita.

Modifica e visualizzazione delle impostazioni ACL con setfacl e getfacl

Per impostare un ACL è necessario il comando setfacl. Per vedere le impostazioni ACL correnti di cui hai bisogno ottenere. Squadra ls -l non mostra alcun ACL esistente; mostra semplicemente un + dopo l'elenco dei permessi, il che indica che gli ACL si applicano anche al file.

Prima di configurare gli ACL, è sempre una buona idea mostrare le impostazioni ACL correnti con ottenere. Nell'esempio seguente, puoi vedere le autorizzazioni attuali, come mostrato con ls -l, e anche come mostrato con ottenere. Se guardi abbastanza da vicino, 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: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Come risultato dell'esecuzione del comando ottenere di seguito puoi vedere che i permessi sono mostrati per tre diversi oggetti: utente, gruppo e altri. Ora aggiungiamo un ACL per fornire autorizzazioni di lettura ed esecuzione anche al gruppo di vendita. comando per questo setfacl -mg:vendite:rx /dir. In questa squadra -m indica che è necessario modificare le impostazioni ACL correnti. Dopo di che g:vendite:rx dice al comando di impostare un ACL di lettura ed esecuzione (rx) per il gruppo (g) saldi. Di seguito puoi vedere come appare il comando, nonché l'output del comando getfacl dopo aver modificato le impostazioni ACL correnti.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Ora che hai capito come impostare una ACL di gruppo, è facile comprendere le ACL per gli utenti e altri utenti. Ad esempio, il comando setfacl -mu:linda:rwx /data fornisce i permessi all'utente linda nella directory /data senza renderlo il proprietario o modificare l'assegnazione del proprietario attuale.

Squadra setfacl ha molte funzionalità e opzioni. Un'opzione è particolarmente importante, il parametro -R. Se utilizzata, l'opzione crea l'impostazione ACL per tutti i file e le sottodirectory attualmente esistenti nella directory in cui si imposta l'ACL. Si consiglia di utilizzare sempre questa opzione quando si modificano gli ACL per le directory esistenti.

Utilizzo degli ACL predefiniti

Uno dei vantaggi derivanti dall'utilizzo delle ACL è che puoi concedere autorizzazioni a più utenti o gruppi in una directory. Un altro vantaggio è che puoi abilitare l'ereditarietà lavorando con gli ACL predefiniti.

Impostando l'ACL predefinito, determini le autorizzazioni che verranno impostate per tutti i nuovi elementi creati nella directory. Tieni presente che l'ACL predefinito non modifica le autorizzazioni sui file e sulle sottodirectory esistenti. Per modificarli, è necessario aggiungere anche un ACL normale!

Questo è importante sapere. Se si desidera utilizzare un ACL per configurare più utenti o gruppi per accedere alla stessa directory, è necessario impostare l'ACL due volte. Primo utilizzo setfacl -R -mper modificare l'ACL per i file correnti. Quindi utilizzare setfacl-md:prendersi cura di tutti i nuovi elementi che verranno anche creati.

Per impostare l'ACL predefinito è sufficiente aggiungere l'opzione d dopo l'opzione -m (l'ordine conta!). Quindi usa setfacl -md:g:sales:rx /datase desideri che le vendite di gruppo leggano ed eseguano tutto ciò che viene creato nella directory /data.

Quando si utilizzano ACL predefiniti, potrebbe essere utile anche impostare ACL per altri. Di solito questo non ha molto senso perché puoi anche modificare le autorizzazioni per altri utenti chmod. Tuttavia, cosa non puoi fare con chmod, consiste nel specificare i diritti che devono essere concessi ad altri utenti per ogni nuovo file che viene creato. Se vuoi impedire ad altri di ottenere autorizzazioni su qualsiasi cosa creata in /data, ad esempio, usa setfacl -md:o::- /data.

Gli ACL e le autorizzazioni regolari non sono sempre ben integrati. Potrebbero sorgere problemi se si applica un ACL predefinito a una directory dopo aver aggiunto elementi a quella directory e quindi si tenta di modificare le normali autorizzazioni. Le modifiche che si applicano alle autorizzazioni regolari non si rifletteranno bene nella panoramica ACL. Per evitare problemi, imposta prima i permessi normali, quindi imposta gli ACL predefiniti (e successivamente prova a non modificarli nuovamente).

Esempio di gestione dei diritti elevati tramite ACL

In questo esempio, continuerai con le directory /data/account e /data/sales create in precedenza. Negli esempi precedenti, ti sei assicurato che il gruppo vendite disponga delle autorizzazioni su /data/sales e che il gruppo di account abbia le autorizzazioni su /data/account.

Innanzitutto, assicurati che il gruppo di account ottenga le autorizzazioni di lettura sulla directory /data/sales e il gruppo vendite ottenga le autorizzazioni di lettura sulla directory /data/account.

Quindi imposti gli ACL predefiniti per assicurarti che tutti i nuovi file dispongano delle autorizzazioni corrette impostate per tutti i nuovi elementi.

  1. Apri un terminale.
  2. seguire setfacl -mg:account:rx /data/sales и setfacl -mg:vendite:rx /data/account.
  3. seguire ottenereper assicurarti che le autorizzazioni siano state impostate nel modo desiderato.
  4. seguire setfacl -md:g:account:rwx,g:sales:rx /data/salesper impostare l'ACL predefinito per la directory delle vendite.
  5. Aggiungi un ACL predefinito per la directory /data/account utilizzando setfacl -md:g:vendite:rwx,g:account:rx /data/account.
  6. Verifica che le impostazioni ACL siano effettive aggiungendo un nuovo file a /data/sales. Completare toccare /data/sales/newfile ed eseguire getfacl /data/sales/newfile per verificare le autorizzazioni attuali.

Impostazione delle autorizzazioni predefinite con umask

Sopra, hai imparato come lavorare con gli ACL predefiniti. Se non stai utilizzando un ACL, esiste un'opzione della shell che determina le autorizzazioni predefinite che otterrai: umask (maschera inversa). In questa sezione imparerai come modificare le autorizzazioni predefinite con umask.

Potresti aver notato che quando crei un nuovo file, vengono impostate alcune autorizzazioni predefinite. Queste autorizzazioni sono determinate dall'impostazione umask. Questa impostazione della shell si applica a tutti gli utenti all'accesso. Nel parametro umask viene utilizzato un valore numerico che viene sottratto ai permessi massimi impostabili automaticamente per il file; L'impostazione massima per i file è 666 e per le directory è 777.

Tuttavia, a questa regola si applicano alcune eccezioni. È possibile trovare una panoramica completa delle impostazioni umask nella tabella seguente.

Dei 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. Senso umask il valore 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 i loro risultati nella tabella seguente.

Permessi in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Un modo semplice per vedere come funziona l'impostazione umask è il seguente: iniziare con i permessi predefiniti del file impostati su 666 e sottrarre umask per ottenere i permessi effettivi. Fai lo stesso per la directory e le sue autorizzazioni predefinite di 777.

Esistono due modi per modificare l'impostazione umask: per tutti gli utenti e per i singoli utenti. Se si desidera impostare umask per tutti gli utenti, è necessario assicurarsi che l'impostazione umask venga presa in considerazione quando si avviano i file dell'ambiente shell, come specificato in /etc/profile. L'approccio corretto è creare uno script di shell chiamato umask.sh nella directory /etc/profile.d e specificare l'umask che si desidera utilizzare in quello script di shell. Se l'umask viene modificato in questo file, verrà applicato a tutti gli utenti dopo aver effettuato l'accesso al server.

Un'alternativa all'impostazione di umask tramite /etc/profile e file correlati, dove si applica a tutti gli utenti che effettuano l'accesso, è modificare le impostazioni di umask in un file chiamato .profile creato nella directory home di ciascun utente.

Le impostazioni applicate in questo file si applicano solo al singolo utente; quindi questo è un buon metodo se hai bisogno di maggiori dettagli. Personalmente mi piace questa funzionalità per modificare l'umask predefinito per l'utente root in 027 mentre gli utenti normali utilizzano l'umask predefinito 022.

Lavorare con attributi utente estesi

Questa è la sezione finale sui permessi di Linux.

Quando si lavora con le autorizzazioni, esiste sempre una relazione tra un oggetto utente o gruppo e le autorizzazioni che gli oggetti utente o gruppo hanno su un file o una directory. Un metodo alternativo per proteggere i file su un server Linux è lavorare con gli attributi.
Gli attributi svolgono il loro lavoro indipendentemente dall'utente che accede al file.

Come con gli ACL, potrebbe essere necessario che gli attributi del file includano l'opzione Mount.

Questa è un'opzione utente_xattr. Se ricevi il messaggio "Operazione non supportata" quando lavori con gli attributi utente estesi, assicurati di impostare il parametro Mount in /etc/fstab.

Molti attributi sono documentati. Alcuni attributi sono disponibili ma non ancora implementati. Non usarli; non ti porteranno niente.

Di seguito sono riportati gli attributi più utili che puoi applicare:

A Questo attributo garantisce che l'ora di accesso al file del file non cambi.
In genere, ogni volta che un file viene aperto, l'ora di accesso al file deve essere registrata nei metadati del file. Ciò influisce negativamente sulle prestazioni; quindi per i file a cui si accede regolarmente, l'attributo A può essere utilizzato per disabilitare questa funzione.

a Questo attributo ti consente di aggiungere ma non rimuovere un file.

c Se utilizzi un file system che supporta la compressione a livello di volume, questo attributo di file garantisce che il file venga compresso quando il motore di compressione viene abilitato per la prima volta.

D Questo attributo garantisce che le modifiche ai file vengano scritte immediatamente sul disco anziché prima memorizzate nella cache. Questo è un attributo utile su file di database importanti per assicurarsi che non si perdano tra la cache dei file e il disco rigido.

d Questo attributo garantisce che il file non verrà salvato nei backup in cui viene utilizzata l'utilità dump.

I Questo attributo abilita l'indicizzazione per la directory in cui è abilitato. Ciò fornisce un accesso ai file più rapido per filesystem primitivi come Ext3 che non utilizzano il database B-tree per un accesso rapido ai file.

i Questo attributo rende il file immutabile. Pertanto, non è possibile apportare modifiche al file, il che è utile per i file che necessitano di protezione aggiuntiva.

j Questo attributo garantisce che, su un file system ext3, il file venga prima scritto nel journal e poi nei blocchi dati sul disco rigido.

s Sovrascrivere i blocchi in cui è stato salvato il file su 0 dopo aver eliminato il file. Ciò garantisce che il file non possa essere ripristinato una volta eliminato.

u Questo attributo memorizza le informazioni sull'eliminazione. Ciò consente di sviluppare un'utilità che funzioni con queste informazioni per salvare i file eliminati.

Se vuoi applicare gli attributi, puoi usare il comando chattra. Ad esempio, usa chattr +s qualchefileper applicare attributi a qualche file. Hai bisogno di rimuovere un attributo? Quindi utilizzare chattr -s un filee verrà rimosso. Per ottenere una panoramica di tutti gli attributi attualmente applicati, utilizzare il comando lsattr.

Riassunto

In questo articolo hai imparato come lavorare con le autorizzazioni. Leggi le tre autorizzazioni di base, le autorizzazioni avanzate e come applicare gli ACL su un file system. Hai anche imparato come utilizzare l'opzione umask per applicare le autorizzazioni predefinite. Alla fine di questo articolo hai imparato come utilizzare gli attributi estesi dall'utente per applicare un ulteriore livello di sicurezza del file system.

Se ti è piaciuta questa traduzione, scrivila nei commenti. Ci sarà più motivazione per realizzare traduzioni utili.

Ho corretto alcuni errori di battitura ed errori grammaticali nell'articolo. Ridotti alcuni paragrafi voluminosi in paragrafi più piccoli per facilitare la lettura.

Invece di "Solo qualcuno con diritti amministrativi sulla directory può applicare l'autorizzazione di esecuzione". risolto in "Solo qualcuno con autorizzazioni di scrittura sulla directory può applicare l'autorizzazione di esecuzione.", che sarebbe più corretto.

Grazie per i commenti berez.

Sostituito:
Se non sei il proprietario dell'utente, la shell controllerà se sei membro di un gruppo, noto anche come gruppo del file.

A:
Se non sei il proprietario del file, la shell controllerà se sei membro di un gruppo che dispone dei permessi sul file. Se sei un membro di questo gruppo, accederai al file con le autorizzazioni impostate dal gruppo e la shell smetterà di controllare.

Grazie per il tuo commento Criptopirata

Fonte: habr.com

Aggiungi un commento