adduser

In questo articolo mostrerò come utilizzare il comando adduser per la creazione o modifica di un utente su un sistema GNU/Linux.

Solitamente il comando adduser si trova su tutti i sistemi GNU/Linux, ma il suo comportamento potrebbe non essere uniforme tra le diverse distribuzioni. Ad esempio sulla distribuzione CentOS 7 il comando adduser è un link simbolico al comando useradd, che è un comando di “basso livello” usato per aggiungere utenti al sistema. Diversamente, su distribuzioni basate su Debian, adduser è uno script Perl che consente l’aggiunta/modifica di un utente sfruttando le opzioni passate dalla riga di comando nonché le impostazioni configurate in un apposito file, ovvero /etc/adduser.conf. In realtà, lo script adduser è un wrapper invocato anche per l’aggiunta/modifica di un gruppo tramite il link simbolico addgroup.

Il file di configurazione

Andiamo dunque a vedere cosa è contenuto di default nel file /etc/adduser.conf. In particolare troveremo la definizione di alcune variabili che regolano le modalità con cui vengono creati i nuovi utenti e gruppi. Nel listato che segue, per brevità, ometto la maggior parte dei commenti.

# Shell di login di default del sistema
DSHELL=/bin/bash
# Directory home di default per gli utenti
DHOME=/home

GROUPHOMES=no
LETTERHOMES=no

# Template per la home directory dei nuovi utenti
SKEL=/etc/skel

# UID/GID per gli utenti/gruppi di sistema
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999

# UID/GID per utenti/gruppi non di sistema
FIRST_UID=1000
LAST_UID=59999
FIRST_GID=1000
LAST_GID=59999

# Creare un gruppo con lo stesso nome del nuovo utente?
USERGROUPS=yes

# Se USERGROUPS=no, il GID del gruppo 'users', che sarà il gruppo primario del nuovo utente
USERS_GID=100

# Permessi con cui verranno create le directory
DIR_MODE=0755

# Imposta il bit GID sulla home directory del nuovo utente
SET_GID_HOME=no

QUOTAUSER=""

# File della directory skel da ignorare durante la creazione della home
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"

# Impostazione gruppi aggiuntivi
#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"
#ADD_EXTRA_GROUPS=1

#NAME_REGEX="^[a-z][-a-z0-9_]*\$"

#USE_EXTRAUSERS=1

Dentro lo script adduser

Osservare il contenuto dello script /usr/sbin/adduser è molto istruttivo, anche se (come me) non avete familiarità con il linguaggio Perl. Infatti è sufficiente avere qualche minima nozione di programmazione o di scripting per capire, grossomodo, cosa fa.

In particolare, tra le tante cose, si può osservare che in fin dei conti lo script non fa altro che impostare alcuni default, leggere il file di configurazione mostrato in precedenza, elaborare le opzioni e gli argomenti passati sulla riga di comando al fine di preparare le azioni da eseguire, anche in funzione del nome con cui lo script è stato invocato:

my $action = $0 eq "addgroup" ? "addgroup" : "adduser";

La porzione di codice precedente esamina il nome con cui lo script è stato invocato ($0): se il nome è uguale ad addgroup, l’azione (variabile $action) viene impostata ad addgroup, altrimenti viene impostata ad adduser.

Fatto ciò, lo script invoca i diversi comandi di basso livello (useradd e groupadd) passando le opportune opzioni ed argomenti stabiliti in precedenza.

Esempi

Vediamo ora alcuni esempi pratici di utilizzo di adduser.

Default, nessuna opzione

$ sudo adduser sysadmin

 Aggiunta dell'utente «sysadmin» …
 Aggiunta del nuovo gruppo «sysadmin» (1001) …
 Aggiunta del nuovo utente «sysadmin» (1001) con gruppo «sysadmin» …
 Creazione della directory home «/home/sysadmin» …
 Copia dei file da «/etc/skel» …
 Inserire nuova password UNIX: 
 Reinserire la nuova password UNIX: 
 passwd: password updated successfully
 Changing the user information for sysadmin
 Enter the new value, or press ENTER for the default
     Full Name []: System Administrator
     Room Number []: 
     Work Phone []: 
     Home Phone []: 
     Other []: 
 Le informazioni sono corrette? [S/n] S

Osserviamo il risultato del comando appena eseguito:

$ id sysadmin
 uid=1001(sysadmin) gid=1001(sysadmin) gruppi=1001(sysadmin)

$ ls -ldh /home/sysadmin/
 drwxr-xr-x 2 sysadmin sysadmin 4,0K gen  2 09:31 /home/sysadmin/

E’ stato creato un nuovo utente chiamato ‘sysdamin’, con uid=1001 (il primo disponibile per utenti non di sistema) e con gruppo primario gid=1001 omonimo. Il nuovo utente non appartiene a nessun ulteriore gruppo aggiuntivo. La home del nuovo utente è /home/sysadmin, con permessi 0755 (il bit SGID non è impostato).

Opzioni per utente non di sistema

Vediamo ora quali possono essere alcune delle opzioni che possiamo utilizzare quando vogliamo aggiungere un utente “normale”, ovvero non di sistema:

adduser  [options]  [--home  DIR]  [--shell SHELL] [--no-create-home]
         [--uid ID] [--firstuid ID] [--lastuid ID]
         [--ingroup GROUP | --gid ID] [--disabled-password] [--disabled-login]
         [--gecos GECOS] [--add_extra_groups] [--encrypt-home] user

Come si può intuire, molte delle opzioni servono a modificare il comportamento di default del comando. Ad esempio con “--home DIR” possiamo specificare una directory home particolare, e con “--shell SHELL” possiamo assegnare all’utente una shell diversa da quella prevista di default (variabile DSHELL nel file di configurazione). L’opzione --disabled-login evita che venga impostata una password durante la creazione dell’utente, pertanto l’utente non potrà fare il login. Con l’opzione --disabled-password, invece, si impedisce soltanto il login con password, mentre resta abilitato con altri metodi (ad esempio con chiavi RSA via SSH).

L’opzione “--ingroup GROUP” specifica il gruppo primario del nuovo utente, mentre “--add-extra-groups” fa in modo che l’utente sia assegnato ai gruppi aggiuntivi stabiliti nel file di configurazione.

Come si osserva facilmente dalla sintassi, l’unico parametro obbligatorio per il comando adduser è soltanto ‘user’, vale a dire la stringa che identifica il nuovo utente all’interno del sistema.

Opzioni per utenti di sistema

La creazione di un utente di sistema è molto simile alla creazione di un utente normale. E’ da notare l’uso dell’opzione --system, che inciderà nella scelta dei valori di UID e GID:

adduser --system [opzioni] [--home DIR] [--shell SHELL] [--no-create-home]
       [--uid ID] [--group |  --ingroup  GRUPPO  |  --gid  ID]
       [--disabled-password] [--disabled-login] [--gecos GECOS] utente

Perché crere utenti “di sistema” invece di utenti “tradizionali”? Un caso tipico è quello in cui abbiamo bisogno di eseguire dei servizi di sistema (ad esempio applicazioni server) con un utente non privilegiato (quindi non l’utente root). In questo scenario è preferibile avere un utente dedicato che non abbia autorizzazioni particolari al di fuori di quelle strettamente necessarie ad eseguire il servizio, senza necessità di avere una password, una casella di posta, una home o una shell dedicata, e senza la necessità di loggarsi sul sistema.

La scelta di usare un utente di sistema è prettamente organizzativa; stabilire degli intervalli di UID e GID per utenti e gruppi di sistema ne semplifica l’identificazione e la gestione, ma dal punto di vista strettamente tecnico/strutturale non ci sono differenze con utenti “normali”.

GECOS?

L’opzione “--gecos GECOS” serve a specificare le informazioni aggiuntive per l’utente, quelle che adduser ci ha chiesto in maniera interattiva nel primo esempio mostrato, vale a dire: Full Name, Room Number, Work Phone, Home Phone, Others. Queste informazioni devono essere passate sotto forma di stringa composta da valori separati da una virgola, e compariranno nel quinto campo della riga di /etc/passwd relativa all’utente:

$ grep sysadmin /etc/passwd
 sysadmin:x:1001:1001:System Administrator,,,:/home/sysadmin:/bin/bash

Esempio pratico

Facciamo ora un esempio di aggiunta di un nuovo utente specificando delle opzioni per modificare il comportamento di default:

$ sudo adduser --home /home/datamaster --shell /bin/dash --uid 1004 --ingroup users --disabled-password --gecos "Database administrator,381,,," dbadmin

 Aggiunta dell'utente «dbadmin» …
 Aggiunta del nuovo utente «dbadmin» (1004) con gruppo «users» …
 Creazione della directory home «/home/datamaster» …
 Copia dei file da «/etc/skel» …

Come evidente, avendo specificato manualmente i dettagli GECOS, il comando procede senza farci ulteriori domande. Non ci viene nemmeno chiesto di impostare una password, in virtù dell’opzione --disabled-password. Vediamo quindi qual è il risultato dell’operazione precedente:

$ id dbadmin
 uid=1004(dbadmin) gid=100(users) gruppi=100(users)

$ grep dbadmin /etc/passwd
 dbadmin:x:1004:100:Database administrator,381,,:/home/datamaster:/bin/dash

$ ls -lhd /home/datamaster/
 drwxr-xr-x 2 dbadmin users 4,0K gen  2 10:11 /home/datamaster/

L’utente dbadmin ha uid=1004, come specificato manualmente al posto del primo valore disponibile; inoltre per il nuovo utente non è stato creato un gruppo omonimo ed il suo gruppo primario è quello specificato con l’opzione --ingroup. La sua home directory non prende il nome dallo username (dbadmin) ma è quella specificata con l’opzione –home.

Aggiunta di un utente ad un gruppo aggiuntivo esistente

Il comando adduser può essere usato anche per aggiungere un utente (esistente) ad un gruppo aggiuntivo (anch’esso esistente). Ad esempio supponiamo che, per motivi pratici, l’utente dbadmin creato precedentemente debba essere aggiunto anche al gruppo lpadmin. Allo stato attuale, l’utente dbadmin appartiene soltanto al gruppo users, che è il suo gruppo primario.

La sintassi in questo caso è molto semplice:

adduser [opzioni] utente gruppo

Nella pratica:

$ id dbadmin
 uid=1004(dbadmin) gid=100(users) gruppi=100(users)

$ sudo adduser dbadmin lpadmin
 Aggiunta dell'utente «dbadmin» al gruppo «lpadmin» …
 Adding user dbadmin to group lpadmin
 Fatto.

$ id dbadmin
 uid=1004(dbadmin) gid=100(users) gruppi=100(users),113(lpadmin)

Conclusioni

Questo articolo è il primo di una (spero) lunga serie dedicata ai comandi più frequenti usati sui sistemi GNU/Linux e Unix in generale. Quanto mostrato dovrebbe essere sufficiente a gestire gli utenti nei casi di normale utilizzo.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi