Ricerca nel sito web

Serie RHCSA: utilizzo degli ACL (elenchi di controllo degli accessi) e montaggio di condivisioni Samba/NFS - Parte 7


Nell'ultimo articolo (serie RHCSA Parte 6) abbiamo iniziato a spiegare come impostare e configurare l'archiviazione del sistema locale utilizzando parted e ssm.

Abbiamo anche discusso come creare e montare volumi crittografati con una password durante l'avvio del sistema. Inoltre, ti abbiamo avvertito di evitare di eseguire operazioni critiche di gestione dello storage sui filesystem montati. Tenendo presente questo, esamineremo ora i formati di file system più utilizzati in Red Hat Enterprise Linux 7 e poi procederemo a trattare gli argomenti relativi al montaggio, all'utilizzo e allo smontaggio entrambi manualmente. e filesystem di rete automaticamente (CIFS e NFS), insieme all'implementazione di elenchi di controllo degli accessi per il tuo sistema.

Prerequisiti

Prima di procedere oltre, assicurati di avere a disposizione un server Samba e un server NFS (nota che NFSv2 non è più supportato in RHEL7).

Durante questa guida utilizzeremo una macchina con IP 192.168.0.10 con entrambi i servizi in esecuzione come server e una macchina RHEL 7 come client con indirizzo IP 192.168 .0.18. Più avanti nell'articolo ti diremo quali pacchetti devi installare sul client.

Formati di file system in RHEL 7

A partire da RHEL 7, XFS è stato introdotto come file system predefinito per tutte le architetture grazie alle sue elevate prestazioni e scalabilità. Attualmente supporta una dimensione massima del filesystem di 500 TB secondo gli ultimi test eseguiti da Red Hat e dai suoi partner per l'hardware mainstream.

Inoltre, XFS abilita user_xattr (attributi utente estesi) e acl (elenchi di controllo accessi POSIX) come opzioni di montaggio predefinite, a differenza di ext3 o ext4 (ext2 è considerato deprecato a partire da RHEL 7), il che significa che non è necessario specificare esplicitamente tali opzioni sulla riga di comando o in /etc/fstab quando si monta un filesystem XFS (se si desidera disabilitare tali opzioni in quest'ultimo caso, devi usare esplicitamente no_acl e no_user_xattr).

Tieni presente che gli attributi utente estesi possono essere assegnati a file e directory per memorizzare informazioni aggiuntive arbitrarie come il tipo MIME, il set di caratteri o la codifica di un file, mentre i permessi di accesso per gli attributi utente sono definiti dai normali bit di autorizzazione dei file.

Elenchi di controllo degli accessi

Poiché ogni amministratore di sistema, principiante o esperto, conosce bene i normali permessi di accesso a file e directory, che specificano determinati privilegi (lettura, scrittura ed esecuzione). ) per il proprietario, il gruppo e "il mondo" (tutti gli altri). Tuttavia, se hai bisogno di rinfrescarti un po' la memoria, sentiti libero di fare riferimento alla Parte 3 della serie RHCSA.

Tuttavia, poiché il set ugo/rwx standard non consente di configurare permessi diversi per utenti diversi, sono state introdotte ACL per definire diritti di accesso più dettagliati per file e directory rispetto a quelli specificati dalle autorizzazioni regolari.

In effetti, i permessi definiti dall'ACL sono un superset dei permessi specificati dai bit dei permessi del file. Vediamo come tutto questo si traduce nel mondo reale.

1. Esistono due tipi di ACL: ACL di accesso, che possono essere applicati a un file specifico o a una directory) e ACL predefinite, che possono essere applicate solo a una directory. Se i file in esso contenuti non hanno un set ACL, ereditano l'ACL predefinito della directory principale.

2. Per iniziare, gli ACL possono essere configurati per utente, per gruppo o per un utente che non appartiene al gruppo proprietario di un file.

3. Gli ACL vengono impostati (e rimossi) utilizzando setfacl, con -m o - x opzioni, rispettivamente.

Ad esempio, creiamo un gruppo denominato tecmint e aggiungiamo ad esso gli utenti johndoe e davenull:

groupadd tecmint
useradd johndoe
useradd davenull
usermod -a -G tecmint johndoe
usermod -a -G tecmint davenull

E verifichiamo che entrambi gli utenti appartengano al gruppo supplementare tecmint:

id johndoe
id davenull

Creiamo ora una directory chiamata playground all'interno di /mnt e un file chiamato testfile.txt al suo interno. Imposteremo il proprietario del gruppo su tecmint e modificheremo i suoi permessi ugo/rwx predefiniti su 770 (permessi di lettura, scrittura ed esecuzione concessi a entrambi il proprietario e il proprietario del gruppo del file):

mkdir /mnt/playground
touch /mnt/playground/testfile.txt
chmod 770 /mnt/playground/testfile.txt

Quindi cambia utente in johndoe e davenull, in quest'ordine, e scrivi nel file:

echo "My name is John Doe" > /mnt/playground/testfile.txt
echo "My name is Dave Null" >> /mnt/playground/testfile.txt

Fin qui tutto bene. Ora lasciamo che l'utente gacanepa scriva sul file e l'operazione di scrittura fallirà, come era prevedibile.

Ma cosa succede se effettivamente abbiamo bisogno che l'utente gacanepa (che non è un membro del gruppo tecmint) abbia i permessi di scrittura su /mnt/playground/testfile.txt?< La prima cosa che potrebbe venirti in mente è aggiungere quell'account utente al gruppo tecmint. Ma questo gli darà i permessi di scrittura su TUTTI i file in cui il bit di scrittura è impostato per il gruppo, e non lo vogliamo. Vogliamo solo che possa scrivere su /mnt/playground/testfile.txt.

touch /mnt/playground/testfile.txt
chown :tecmint /mnt/playground/testfile.txt
chmod 777 /mnt/playground/testfile.txt
su johndoe
echo "My name is John Doe" > /mnt/playground/testfile.txt
su davenull
echo "My name is Dave Null" >> /mnt/playground/testfile.txt
su gacanepa
echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Diamo all'utente gacanepa l'accesso in lettura e scrittura a /mnt/playground/testfile.txt.

Esegui come root,

setfacl -R -m u:gacanepa:rwx /mnt/playground

e avrai aggiunto con successo un ACL che consente a gacanepa di scrivere nel file di test. Passa quindi all'utente gacanepa e prova a scrivere nuovamente sul file:

echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Per visualizzare gli ACL per un file o una directory specifica, utilizza getfacl:

getfacl /mnt/playground/testfile.txt

Per impostare un ACL predefinito su una directory (che i suoi contenuti erediteranno a meno che non vengano sovrascritti diversamente), aggiungi d: prima della regola e specifica una directory invece del nome di un file:

setfacl -m d:o:r /mnt/playground

L'ACL di cui sopra consentirà agli utenti che non fanno parte del gruppo proprietario di avere accesso in lettura ai futuri contenuti della directory /mnt/playground. Nota la differenza nell'output di getfacl /mnt/playground prima e dopo la modifica:

Il capitolo 20 della Guida ufficiale all'amministrazione dello storage RHEL 7 fornisce ulteriori esempi di ACL e ti consiglio vivamente di dargli un'occhiata e di tenerlo a portata di mano come riferimento.