Tra le sfide dell'amministrazione di Linux nel moderno ambiente aziendale c'è l'aspettativa che possiamo e dobbiamo gestire chi ha accesso a quali informazioni. C'era una volta, le uniche persone che avevano bisogno di accedere ai filesystem Linux potevano essere classificate in modo generale:attraverso i permessi del filesystem Linux.
Revisione delle nozioni di base
Il filesystem Linux ci fornisce tre tipi di permessi. Ecco una recensione semplificata:
- U ser (o proprietario dell'utente)
- G gruppo (o gruppo proprietario)
- O là (tutti gli altri)
Con queste autorizzazioni, possiamo concedere tre (in realtà cinque, ma ci arriveremo tra un minuto) tipi di accesso:
- R vai
- C rito
- eX eseguire
Questi livelli di accesso sono spesso adeguati in molti casi. Supponiamo di avere una directory in cui risiedono i file del reparto contabilità. Puoi impostare queste autorizzazioni su:
drwxrwxr-x 2 accounting accounting 12 Jan 8 15:13
L'utente del servizio di contabilità (il proprietario dell'utente) può leggere e scrivere nella directory e i membri della accounting
gruppo (o gruppo proprietario) può leggere e scrivere. Altri (utenti che non fanno parte del reparto contabilità) possono, tuttavia, vedere ed eseguire ciò che c'è dentro, cosa che alcuni potrebbero ritenere una cattiva idea.
[ Popolare anche: Nozioni di base sull'amministratore di sistema Linux:gestione dell'account utente ]
Quindi, potremmo modificare le autorizzazioni in questo:
drwxrwx--- 2 accounting accounting 12 Jan 8 15:13 .
Nota: Puoi anche utilizzare autorizzazioni speciali per controllare impostazioni come chi possiede effettivamente i nuovi file creati in quella directory, nonché il bit persistente che controlla se i membri del gruppo possono eliminare i file degli altri. Tuttavia, questo esula dall'ambito di questa discussione.
Visualizzazione dell'ACL corrente
Cosa succede se hai uno stagista contabile (Kenny) che deve essere in grado di leggere determinati file (o anche solo i file di proprietà di Fred, il suo manager)? O forse anche le persone nel reparto vendite hanno bisogno di accedere alla accounting
i file del proprietario per creare fatture per il team di Fred al fine di fatturare i clienti, ma non vuoi che il team di vendita veda gli altri rapporti generati dal team di Fred. Questa situazione può essere complicata perché, con autorizzazioni regolari, ogni file e directory può avere un solo utente e proprietario di gruppo alla volta. Questo tipo di situazione è ciò che gli elenchi di controllo di accesso (ACL) di Linux dovevano risolvere.
Gli ACL ci consentono di applicare un insieme più specifico di autorizzazioni a un file o una directory senza (necessariamente) modificare la proprietà e le autorizzazioni di base. Ci consentono di "attaccare" l'accesso ad altri utenti o gruppi.
Possiamo visualizzare l'ACL corrente usando il getfacl
comando:
[root]# getfacl /accounting
getfacl: Removing leading '/' from absolute path names
# file: accounting
# owner: accounting
# group: accounting
user::rwx
group::rwx
other::---
Possiamo vedere che in questo momento non ci sono ACL in questa directory perché le uniche autorizzazioni elencate sono per l'utente, il gruppo e altro. In questo caso, c'è da aspettarselo, perché ho appena creato questa directory in lab e non ho fatto altro che assegnare la proprietà. Quindi, iniziamo aggiungendo un ACL predefinito:
Impostazione di un ACL
La sintassi per impostare un ACL è la seguente:
setfacl [option] [action/specification] file
L'"azione" sarebbe -m
(modifica) o -x
(rimuovere) e la specifica sarebbe l'utente o il gruppo seguito dalle autorizzazioni che vogliamo impostare. In questo caso, utilizzeremo l'opzione -d
(predefinito). Quindi, per impostare l'ACL predefinito per questa directory, eseguiremo:
[root]# setfacl -d -m accounting:rwx /accounting
Dopo di che ora possiamo vedere le informazioni ACL predefinite per quella directory:
[root]# getfacl /accounting
[root]# getfacl: Removing leading '/' from absolute path names
# file: accounting
# owner: accounting
# group: accounting
user::rwx
group::rwx
other::---
default:user::rwx
default:user:accounting:rwx
default:group::rwx
default:mask::rwx
default:other::---
Cosa succede se Fred crea un file in quella directory?
[fred]$ touch test
[fred]$ ls -la
drwxrwx---+ 2 accounting accounting 18 Jan 8 17:51 .
dr-xr-xr-x. 18 root root 262 Jan 8 15:13 ..
-rw-rw----+ 1 fred accounting 0 Jan 8 17:51 test
[fred]$ getfacl test
# file: test
# owner: fred
# group: accounting
user::rw-
user:accounting:rwx #effective:rw-
group::rwx #effective:rw-
Cosa succede se Kenny prova a creare un file? Potresti indovinarlo perché kenny
non è nella accounting
gruppo, non avrà il permesso. Ma vogliamo che Kenny abbia una buona esperienza di lavoro con noi, quindi dobbiamo dargli la possibilità di vedere quali file ci sono nella accounting
directory e vogliamo che sia in grado di creare nuovi file:
[root@lab1 accounting]setfacl -m kenny:rwx /accounting
[root]getfacl ./
# file: .
# owner: accounting
# group: accounting
user::rwx
user:kenny:rwx
Fin qui tutto bene. Ma cosa succede se non vogliamo che questo utente crei file nella accounting
directory? Invece, vogliamo solo fargli leggere i file lì e può creare nuovi file nella sua cartella.
[ Articolo correlato: Nozioni di base sull'amministratore di sistema Linux:gestione dell'account utente con UID e GID ]
Possiamo impostare l'accesso di Kenny sulla accounting
cartella come questa:
[root@lab1 accounting]# setfacl -m kenny:r-x /accounting
[root]# getfacl ./
# file: .
# owner: accounting
# group: accounting
user::rwx
User:kenny:r-x
Ora creiamo a Kenny la sua cartella, gli diamo la proprietà e quindi creiamo la accounting
raggruppare il proprietario del gruppo in modo che altre persone nella accounting
il gruppo può vedere cosa c'è dentro:
[root@lab1 accounting]# mkdir ./kenny
[root]# chown kenny:accounting ./kenny
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:rwx
group::rwx
Hai creato una cartella all'interno di accounting
gruppo di proprietà dell'utente kenny
. Ora può vedere la cartella contabilità, ma solo creare file nella sua cartella:
[root@lab1 accounting]# su kenny
[kenny]$ touch test
touch: cannot touch ‘test’: Permission denied
[kenny]$ cd ./kenny
[kenny]$ touch test
[kenny]$ ls
test
Nota che poiché la cartella è di proprietà della accounting
gruppo, chiunque in quel gruppo può inserire file lì. Poiché abbiamo a che fare con uno stagista, questo fattore probabilmente va bene. Tuttavia, cosa succede se diamo a Kenny una promozione a revisore capo e vogliamo mantenere il suo lavoro segreto a Fred?
[root]# setfacl -m fred:- ./kenny
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---
E se non avessimo voluto nessuno per vedere a cosa sta lavorando Kenny?
[root]# setfacl -m g:accounting:- ./kenny
Nota: Quando vogliamo impostare un gruppo ACL, dobbiamo specificarlo inserendo g:
davanti al nome del gruppo. Per gli utenti, basta modificare il g
a un u
, ma setfacl
presumerà che stiamo parlando di un utente se non metti nulla in quel punto.
Dobbiamo ancora rimuovere le autorizzazioni di base per il proprietario del gruppo in modo che il resto del team di contabilità non possa curiosare nei rapporti di Kenny:
[root]# chmod g-rwx ./kenny
[root]# ls -al
total 0
drwxrwx-wx+ 3 accounting accounting 44 Jan 9 16:38 .
dr-xr-xr-x. 18 root root 262 Jan 8 15:13 ..
drwx------+ 2 kenny accounting 18 Jan 9 17:07 kenny
-rw-rw----+ 1 root root 0 Jan 9 16:33 test
-rw-rw----+ 1 kenny accounting 0 Jan 9 16:27 test2
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---
group::rwx #effective:---
[root]# su jan
[jan]$ touch ./kenny/test
touch: cannot touch ‘./kenny/test’: Permission denied
Ora possiamo gestire chi altro può vedere o scrivere nella cartella di Kenny senza modificare la proprietà. Diamo al CEO (Lisa, che non è un membro del team di contabilità e non avrà accesso al resto della cartella) l'accesso alle cose di Kenny:
[root@lab1 accounting]# useradd lisa
[root]# setfacl -m u:lisa:rwx ./kenny
[root]# su lisa
[lisa]$ touch ./kenny/lisa
[lisa]$ ls ./kenny
lisa test
[lisa]$ touch test
touch: cannot touch ‘test’: Permission denied
[root]# getfacl ./kenny
# file: kenny
# owner: kenny
# group: accounting
user::rwx
user:accounting:---
user:fred:---
user:lisa:rwx
group::rwx
group:accounting:---
Si noti ancora che le autorizzazioni del proprietario del gruppo rimangono aperte, ma il gruppo di contabilità (che è ancora il proprietario) non ha più accesso a quella cartella. Allora, chi lo possiede?
drwxrwx---+ 2 kenny accounting 30 Jan 9 17:16 kenny
Questa parte è difficile. È utile sapere che possiamo togliere le autorizzazioni del proprietario senza cambiare la proprietà, ma potresti voler considerare se questo è il risultato che desideri.
Conclusione
Quindi queste sono le basi. Gli ACL possono creare confusione, quindi ti incoraggio a fornire le pagine man per setfacl
e getfacl
una buona lettura. Ci sono molte altre cose interessanti e utili che puoi fare con questi strumenti, ma si spera che ora capirai abbastanza per iniziare.
[ Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente. ]