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.