Come gestire i gruppi su Linux
I gruppi sono una parte essenziale del modo in cui il controllo degli accessi discrezionali (DAC) viene implementato su Linux e, in generale, su qualsiasi sistema operativo basato su Unix. La creazione, la modifica e la rimozione dei gruppi sono operazioni relativamente semplici che possono essere eseguite utilizzando alcune utilità installate di default.
In questo tutorial impariamo come creare, modificare ed eliminare gruppi su Linux, utilizzando le utility groupadd, groupmod e groupdel.
In questo tutorial imparerai:
- Come creare un gruppo su Linux utilizzando groupadd
- Come verificare quali utenti sono membri di un gruppo
- Come modificare un gruppo utilizzando groupmod
- Come eliminare un gruppo utilizzando groupdel
Gruppi primari vs supplementari
Prima di vedere come creare, modificare ed eliminare gruppi su Linux, dovremmo chiarire la differenza tra gruppi primari e supplementari/aggiuntivi e perché esiste. Oggigiorno praticamente tutte le distribuzioni Linux adottano la politica UPG (User Private Group): ogni volta che un utente viene aggiunto al sistema, diventa membro di un gruppo che porta il suo nome, che viene creato automaticamente: è il gruppo primario dell'utente. Tutti i file creati da un utente appartengono ad esso e al suo gruppo principale.
L'adozione di questa policy rende possibile l'utilizzo di un umask di 002
, che assicura che le directory vengano create con la modalità 775
e i file con la modalità 664
: garantisce i permessi di lettura e scrittura sia all'utente che al gruppo di appartenenza e, insieme all'uso del bit setgid, semplifica l'impostazione di directory condivise per la collaborazione.
Come abbiamo detto, il gruppo primario di un utente viene creato automaticamente quando l'utente viene aggiunto al sistema. Gruppi aggiuntivi possono essere facilmente creati, modificati ed eliminati utilizzando le utilità “groupadd”, “groupmod” e “groupdel”. Vediamo come.
Creazione di un gruppo
Per creare un gruppo su Linux utilizziamo l'utilità groupadd
. La sintassi del comando è molto semplice: nel caso più elementare, basterà passare come argomento il nome del gruppo che vogliamo creare. Supponiamo, ad esempio, di voler creare un nuovo gruppo chiamato “linuxconfig”. Correremmo:
$ sudo groupadd linuxconfig
Una voce per il gruppo appena creato viene aggiunta al file /etc/group
:
linuxconfig:x:1001:
Ogni voce in /etc/group
ha 4 campi: il primo contiene il nome del gruppo, il secondo la password del gruppo (la maggior parte delle volte le password non vengono utilizzate per i gruppi, quindi questo campo è vuoto); il terzo campo contiene il GID (l'ID del gruppo – 1001 in questo caso) e il quarto ospita l'elenco separato da virgole dei membri del gruppo (se il gruppo è il gruppo primario di un utente, tale utente non è elencato in questo campo).
Assegnazione manuale dell'ID gruppo (GID)
Un GID viene assegnato automaticamente a un gruppo al momento della creazione. La policy predefinita consiste nell'assegnare al gruppo il GID più basso disponibile. L'intervallo di GID che possono essere assegnati per gruppi non di sistema è definito nel file /etc/login.defs
, tramite GID_MIN
e GID_MAX
variabili. Il valore del primo è solitamente 1000, mentre il secondo è generalmente impostato a 60000:
$ grep -E "^GID_(MIN|MAX)" /etc/login.defs
GID_MIN 1000
GID_MAX 60000
Se vogliamo fornire un GID specifico durante la creazione di un gruppo, possiamo invocare “groupadd ” con l'opzione -g
(--gid
), passando l'ID numerico che vogliamo da utilizzare come argomento. Nell'esempio seguente creiamo un nuovo gruppo chiamato “tux” e gli assegniamo manualmente 1002 come GID:
$ sudo groupadd -g 1002 tux
Creazione di un gruppo di sistema
Sui sistemi basati su Unix, e quindi anche su Linux, distinguiamo tra gruppi di sistema e non di sistema, proprio come facciamo per gli utenti. I gruppi di sistema non sono intrinsecamente diversi dai gruppi normali: la differenza è che vengono assegnati GID di un intervallo diverso e vengono utilizzati principalmente per i servizi di sistema. Per creare un gruppo di sistema, utilizziamo “groupadd ” con l'opzione-r
(abbreviazione di --system
):
$ sudo groupadd -r tux
L'intervallo di GID assegnati automaticamente ai gruppi di sistema è definito tramite le variabili SYS_GID_MIN
e SYS_GID_MAX
:
$ grep -E "^SYS_GID_(MIN|MAX)" /etc/login.defs
SYS_GID_MIN 201
SYS_GID_MAX 999
Popolamento del gruppo sulla creazione
Quando creiamo un gruppo, possiamo specificare quali utenti dovrebbero farne parte. Tutto quello che dobbiamo fare è usare l'opzione -U
(--users
) e passare un elenco di nomi utente separati da virgole come argomento; affinché il comando abbia successo, gli utenti specificati devono esistere. A titolo di esempio, per creare il gruppo “tux” e aggiungere gli utenti “foo” e “bar” come membri, eseguiremo:
$ sudo groupadd -U foo,bar tux
Modifica di un gruppo
Per modificare la definizione di un gruppo, utilizziamo l'utilità groupmod
e la usiamo in modo simile a groupadd. Vediamo alcuni esempi.
Modificare il GID di un gruppo
Per cambiare il GID di un gruppo, invochiamo l'utility groupmod
con l'opzione -g
, passando il nuovo GID che vogliamo utilizzare come argomento. Per cambiare il GID del gruppo “tux” in 1006, ad esempio, eseguiremmo:
$ sudo groupmod -g 1006 tux
Quando modifichiamo il GID di un gruppo utilizzato come gruppo primario per un utente, la definizione utente viene aggiornata di conseguenza. Supponiamo, ad esempio, di aver creato un utente chiamato “tim”, il cui gruppo primario è “tim”; sia all'utente “tim” che al gruppo “tim” è stato assegnato l'ID 1002:
$ grep tim /etc/group
tim:x:1002:
$ grep tim /etc/passwd
tim:x:1002:1002::/home/tim:/bin/bash
Se modifichiamo il GID del gruppo “tim”, ad esempio 1003, la definizione dell'utente viene aggiornata automaticamente:
# We change the GID of the "tim" group to 1003
$ sudo groupmod -g 1003 tim
# Verify the user entry has been updated
$ grep tim /etc/passwd
tim:x:1002:1003::/home/tim:/bin/bash
I file associati al vecchio GID del gruppo, tuttavia, devono essere aggiornati manualmente per riflettere la modifica.
Modifica del nome del gruppo
Per cambiare il nome di un gruppo, la procedura è simile: utilizziamo semplicemente l'opzione -n
che accetta come argomento il nome del nuovo gruppo. Supponendo di voler rinominare il gruppo “tux” in “bar”, eseguiremo:
$ sudo groupmod -n bar tux
Cambiare i membri del gruppo
Per ridefinire i membri di un gruppo, utilizziamo l'opzione-U
nello stesso modo in cui abbiamo utilizzato l'utilità “groupadd”. Tieni presente che quando viene utilizzata questa opzione, i membri esistenti verranno rimossi dal gruppo se non sono specificati esplicitamente nell'elenco.
Eliminazione di un gruppo
Nel caso in cui desideriamo eliminare un gruppo, dobbiamo utilizzare l'utilità groupdel
. Per eliminare un gruppo basta passare il suo nome come argomento:
$ sudo groupdel tux
Se il gruppo che proviamo a rimuovere è il gruppo primario di un utente, il comando fallirà. Nell'esempio successivo, proviamo a rimuovere il gruppo “tim”, che è il gruppo primario dell'utente “tim”:
$ sudo groupdel tim
groupdel: cannot remove the primary group of user 'tim'
Non vedo un caso ragionevole in cui sarebbe utile rimuovere il gruppo primario di un utente: quando un utente viene eliminato, il suo gruppo primario viene eliminato con esso, a meno che non abbia altri membri (e in realtà non dovrebbe). Se per qualche motivo vogliamo comunque rimuovere il gruppo primario, il comando può essere forzato utilizzando l'opzione -f
(--force
):
$ sudo groupdel -f tim
Dopo aver eseguito tale operazione, l'utente sarà ancora associato al GID del gruppo primario eliminato. Per rimuovere questa associazione, dobbiamo assegnare un nuovo gruppo primario all'utente. Possiamo farlo eseguendo:
$ sudo usermod -g tim
Se rimuoviamo un gruppo che non viene utilizzato come gruppo principale per nessun utente e che ha membri, tali membri verranno automaticamente rimossi da quel gruppo.
Conclusioni
In questo tutorial abbiamo imparato la differenza tra gruppi primari e aggiuntivi su Linux. Abbiamo visto come aggiungere un gruppo e come elencarne i membri, come modificarlo e come rimuoverlo utilizzando rispettivamente le utilità groupadd, groupmod e groupdel. Un gruppo può essere gestito anche “manualmente”, indirizzando la modifica del file /etc/group, utilizzando l'utility “vigr”: di questo abbiamo parlato in un tutorial precedente.