In questo capitolo imparerai come gestire gli utenti.
Obiettivi: In questo capitolo, i futuri amministratori di Linux impareranno a:
aggiungere, eliminare o modificare un gruppo ; aggiungere, eliminare o modificare un utente ; comprendere i file associati agli utenti e ai gruppi e scoprire come gestirli; cambiare il proprietario o il proprietario del gruppo di un file; proteggere un account utente; cambiare identità.
Ogni utente deve avere un gruppo, che è chiamato il gruppo primario dell'utente.
Diversi utenti possono far parte dello stesso gruppo.
Gruppo diversi dal gruppo primario sono chiamati gruppi supplementari.
Nota
Ogni utente ha un gruppo primario e può essere invitato in uno o più gruppi supplementari.
I gruppi e gli utenti sono gestiti dai loro identificatori numerici unici GID e UID.
UID: User IDentifier. ID utente univoco.
GID: Group IDentifier. Identificatore di gruppo univoco.
Sia UID che GID sono riconosciuti dal kernel, il che significa che il Super Admin non è necessariamente l'utente root, purché l'utente uid=0 sia il Super Admin.
I file relativi agli utenti/gruppi sono:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/skel/
/etc/default/useradd
/etc/login.defs
Pericolo
Dovresti sempre usare i comandi di amministrazione invece di modificare manualmente i file.
Nota
Alcuni comandi in questo capitolo richiedono i diritti di amministratore.
Per convenzione, si specifica il comando sudo quando i comandi devono essere eseguiti con diritti di amministratore.
Affinché gli esempi funzionino correttamente, assicuratevi che il vostro account abbia il permesso di usare il comando sudo.
Il comando groupadd aggiunge un gruppo al sistema.
groupadd[-f][-gGID]group
Esempio:
sudogroupadd-g1012GroupeB
Opzione
Descrizione
-g GID
Definisce il GID del gruppo da creare.
-f
Il sistema sceglie unGID se quello specificato dall'opzione -g esiste già.
-r
Crea un gruppo di sistema con un GID tra SYS_GID_MIN e SYS_GID_MAX. Queste due variabili sono definite in /etc/login.defs.
Regole di denominazione del gruppo:
Nessun accento o carattere speciale;
Diverso dal nome di un utente o file di sistema esistenti.
Nota
In Debian, l'amministratore dovrebbe usare, tranne che negli script destinati a essere trasferiti a tutte le distribuzioni Linux, i comandi addgroup e delgroup come specificato in man:
$ man addgroup
DESCRIPTION
adduser and addgroup add users and groups to the system according to command line options and configuration information
in /etc/adduser.conf. They are friendlier front ends to the low-level tools like useradd, groupadd and usermod programs,
by default, choosing Debian policy conformant UID and GID values, creating a home directory with skeletal configuration,
running a custom script, and other features.
Il comando groupdel elimina un gruppo esistente sul sistema.
groupdelgroup
Esempio:
sudogroupdelGroupC
Suggerimento
Quando si elimina un gruppo, possono verificarsi due condizioni:
Se un utente ha un gruppo primario unico e si lancia il comando groupdel su quel gruppo, verrà indicato che c'è un utente specifico sotto il gruppo e che non può essere cancellato.
Se un utente appartiene a un gruppo supplementare (non il gruppo primario dell'utente) e tale gruppo non è il gruppo primario di un altro utente del sistema, il comando groupdel eliminerà il gruppo senza ulteriori richieste.
Quando si elimina un utente con il comando userdel -r, viene eliminato anche il gruppo primario corrispondente. Il nome del gruppo primario di solito corrisponde al nome dell'utente.
Suggerimento
Ogni gruppo ha un GID univoco. Un gruppo può essere utilizzato da più utenti come gruppo supplementare. Per convenzione, il GID del super amministratore è 0. I GIDS riservati ad alcuni servizi o processi sono 201-999, chiamati gruppi di sistema o pseudo gruppi di utenti. Il GID per gli utenti è solitamente maggiore o uguale a 1000. Questi sono relativi a /etc/login.defs, di cui parleremo più tardi.
Poiché un utente fa necessariamente parte di un gruppo, è meglio creare i gruppi prima di aggiungere gli utenti. Pertanto, un gruppo potrebbe non avere alcun membro.
4: Utenti supplementari del gruppo (escluso l'utente primario unico).
Attenzione
Il nome del gruppo in /etc/group e /etc/gshadow deve corrispondere uno a uno, cioè ogni riga del file /etc/group deve avere una riga corrispondente nel file /etc/gshadow.
Un ! nella password indica che è bloccata. In questo modo, nessun utente può utilizzare la password per accedere al gruppo (poiché i membri del gruppo non ne hanno bisogno).
GID del gruppo primario. Il GID qui può anche essere un nome di un gruppo.
-G GID1,[GID2]...
GID dei gruppi supplementari. Il GID qui può anche essere un nome di un gruppo. È possibile specificare molti gruppi supplementari separati da virgole.
-d directory
Crea la directory home.
-s shell
Specifica la shell dell'utente.
-c COMMENT
Aggiunge un commento.
-U
Aggiunge l'utente a un gruppo con lo stesso nome che viene creato nello stesso momento. Se non viene specificato, la creazione di un gruppo con lo stesso nome avviene durante la creazione dell'utente.
-M
Non crea la home directory dell'utente.
-r
Crea un account di sistema.
Alla sua creazione, l'account non ha una password ed è bloccato.
Per sbloccare l'account è necessario assegnare una password.
Quando si richiama il comando useradd senza alcuna opzione, vengono impostate le seguenti impostazioni predefinite per il nuovo utente:
Crea una home directory con lo stesso nome;
Crea un gruppo primario con lo stesso nome;
La shell predefinita è bash;
I valori UID e GID del gruppo primario dell'utente vengono automaticamente detratti. Questo è di solito un valore unico tra 1000 e 60.000.
Nota
Le impostazioni e i valori predefiniti si ottengono dai seguenti file di configurazione:
Niente accenti, lettere maiuscole o caratteri speciali;
Anche se è possibile utilizzare un nome utente in maiuscolo in RockyLinux, non lo raccomandiamo;
Opzionale: imposta le opzioni -u, -g, -d e -s alla creazione.
Diverso dal nome di un gruppo o file di sistema esistente;
Il nome utente può contenere fino a 32 caratteri.
Attenzione
L'albero delle home directory deve essere già stato creato tranne che per l'ultima directory.
L'ultima directory viene creata dal comando useradd, che sfrutta l'opportunità per copiare i file da /etc/skel al suo interno.
Un utente può appartenere a diversi gruppi oltre a quello principale.
Esempio:
sudouseradd-u1000-gGroupA-GGroupP,GroupCalbert
Nota
In Debian, è necessario specificare l'opzione -m per forzare la creazione della directory di login o impostare la variabile CREATE_HOME nel file /etc/login.defs. In tutti i casi, l'amministratore dovrebbe usare i comandi adduser e deluser come specificato in man, tranne che negli script destinati ad essere trasferiti a tutte le distribuzioni Linux:
$ man useradd
DESCRIPTION
**useradd** is a low-level utility for adding users. On Debian, administrators should usually use **adduser(8)**
instead.
Il comando usermod consente di modificare un utente.
usermod[-uUID][-gGID][-ddirectory][-m]login
Esempio:
sudousermod-u1044carine
Opzioni identiche al comando useradd.
Opzione
Descrizione
-m
Associato all'opzione -d. Sposta il contenuto della vecchia directory di login in quella nuova. Se la vecchia home directory non esiste, la creazione di una nuova home directory non avviene; la creazione della nuova home directory avviene se non esiste.
-l login
Modifica il nome di accesso. Dopo aver modificato il nome di accesso, è anche necessario modificare il nome della directory home per abbinarlo.
-e YYYY-MM-DD
Modifica la data di scadenza dell'account.
-L
Blocca l'account in modo permanente. Cioè, aggiunge un ! all'inizio del campo della password /etc/shadow.
-U
Sblocca l'account.
-a
Aggiunge i gruppi supplementari dell'utente, che devono essere usati insieme all'opzione -G.
-G
Modifica i gruppi supplementari dell'utente e sovrascrive i gruppi supplementari precedenti.
Suggerimento
Per essere modificato, un utente deve essere disconnesso e non avere processi in corso.
Dopo la modifica dell'identificatore, i file appartenenti all'utente hanno un UID sconosciuto. Deve essere riassegnato al nuovo UID.
Dove 1000 è il vecchio UID e 1044 è il nuovo. Gli esempi sono i seguenti:
sudofind/-uid1000-execchown1044:{}\;
Blocco e sblocco dell'account utente, gli esempi sono i seguenti:
Il comando userdel consente di eliminare l'account di un utente.
sudouserdel-rcarine
Opzione
Descrizione
-r
Cancella la directory home dell'utente e i file di posta che si trovano nella directory /var/spool/mail/
Suggerimento
Per essere eliminato, un utente deve essere disconnesso e non avere processi in esecuzione.
Il comando userdel rimuove le righe corrispondenti in /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow. Come detto in precedenza, userdel -r cancellerà anche il corrispondente gruppo primario dell'utente.
2: Password criptata. Utilizza l'algoritmo di crittografia SHA512, definito dal ENCRYPT_METHOD di /etc/login.defs.
3: L'ora in cui la password è stata cambiata l'ultima volta, il formato timestamp, in giorni. Il cosiddetto timestamp si basa sul 1 gennaio 1970 come orario standard. Ogni volta che un giorno passa, il timestamp è +1.
4: Durata minima della password. Ovvero, l'intervallo di tempo tra due modifiche della password (relative al terzo campo), in giorni. Definito dal PASS_MIN_DAYS di /etc/login.defs, il valore predefinito è 0, cioè, quando cambi la password per la seconda volta, non c'è alcuna restrizione. Tuttavia, se è 5, significa che non è permesso cambiare la password entro 5 giorni, e solo dopo 5 giorni.
5: Durata massima della password. Cioè, il periodo di validità della password (relativo al terzo campo). Definito dal PASS_MAX_DAYS di /etc/login.defs.
6: Il numero di giorni di avviso prima della scadenza della password (relativo al quinto campo). Il valore predefinito è di 7 giorni, definito dal PASS_WARN_AGE di /etc/login.defs.
7: Numero di giorni di tolleranza dopo la scadenza della password (in relazione al quinto campo).
8: Tempo di scadenza dell'account, il formato del timestamp, in giorni. Nota che la scadenza di un account differisce dalla scadenza di una password. In caso di scadenza di un account, l'utente non può effettuare il login. In caso di scadenza della password, all'utente non è consentito effettuare il login utilizzando la sua password.
9: Riservato per un uso futuro.
Pericolo
Per ogni riga del file /etc/passwd deve esserci una riga corrispondente nel file /etc/shadow.
Per la conversione della data e dell'ora, fare riferimento al seguente formato di comando:
# Il timestamp viene convertito in una data, "17718" indica il timestamp da inserire.
$date-d"1970-01-01 17718 days"# La data viene convertita in un timestamp, "2018-07-06" indica la data da compilare.
$echo$(($(date--date="2018-07-06"+%s)/86400+1))
Il comando newgrp può selezionare un gruppo, dai gruppi supplementari dell'utente, come nuovo gruppo primario temporaneo. Il comando newgrp ogni volta che viene cambiato il gruppo primario di un utente, crea una nuova child shell (child process). Fate attenzione! child shell e sub shell sono diverse.
newgrp[secondarygroups]
Esempio:
$sudouseraddtest1
$sudopasswdtest1
$sudogroupaddgroupA;sudogroupaddgroupB
$sudousermod-GgroupA,groupBtest1
$idtest1
uid=1000(test1)gid=1000(test1)groups=1000(test1),1001(groupA),1002(groupB)
$echo$SHLVL;echo$BASH_SUBSHELL10
$su-test1
$toucha.txt
$ll
-rw-rw-r--1test1test1010月714:02a.txt
$echo$SHLVL;echo$BASH_SUBSHELL10# Generate a new child shell
$newgrpgroupA
$touchb.txt
$ll
-rw-rw-r--1test1test1010月714:02a.txt
-rw-r--r--1test1groupA010月714:02b.txt
$echo$SHLVL;echo$BASH_SUBSHELL20# You can exit the child shell using the `exit` command
$exit
$logout
$whoami
root
Rimuove in modo permanente la password. Solo per root (uid=0).
-l
Blocca in modo permanente l'account utente. Solo per root (uid=0).
-S
Visualizza lo stato dell'account. Solo per root (uid=0).
-u
Sblocca in modo permanente l'account utente. Solo per root (uid=0).
-e
Fa scadere definitivamente la password. Solo per root (uid=0).
-n DAYS
Definisce la durata minima della password. Cambiamento permanente. Solo per root (uid=0).
-x DAYS
Definisce la durata massima della password. Cambiamento permanente. Solo per root (uid=0).
-w DAYS
Definisce il tempo di avviso prima della scadenza. Cambiamento permanente. Solo per root (uid=0).
-i DAYS
Definisce il ritardo prima della disattivazione quando la password scade. Cambiamento permanente. Solo per root (uid=0).
Utilizzare password -l, cioè aggiungere "!!" all'inizio del campo password dell'utente corrispondente nel file /etc/shadow.
Esempio:
Alain cambia la sua password:
[alain]$passwd
root cambia la password di Alain
sudopasswdalain
Nota
Il comando passwd è a disposizione degli utenti per cambiare la propria password (viene richiesta la vecchia password). L'amministratore può modificare le password di tutti gli utenti senza limitazioni.
Dovranno rispettare le restrizioni di sicurezza.
Quando si gestiscono gli account utente tramite script di shell, può essere utile impostare una password predefinita dopo la creazione dell'utente.
Questo può essere fatto passando la password al comando passwd.
Esempio:
sudoecho"azerty,1"|passwd--stdinphilippe
Attenzione
La password viene inserita in chiaro, passwd si occupa di crittografarla.
Definisce i giorni di ritardo prima della disattivazione, a password scaduta. Cambiamento permanente.
-l
Visualizza i dettagli della politica.
-m DAYS
Definisce la durata minima della password. Cambiamento permanente.
-M DAYS
Definisce la durata massima della password. Cambiamento permanente.
-d LAST_DAY
Definisce il numero di giorni dall'ultima modifica della password. È possibile utilizzare lo stile di data e ora dei giorni o lo stile YYYY-MM-DD. Cambiamento permanente.
-E EXPIRE_DATE
Definisce la data di scadenza dell'account. È possibile utilizzare lo stile di data e ora dei giorni o lo stile YYYY-MM-DD. Cambiamento permanente.
-W WARN_DAYS
Definisce il numero di giorni di avviso prima della scadenza. Cambiamento permanente.
Esempi:
# Il comando `chage` offre anche una modalità interattiva.
$sudochagephilippe
# L'opzione `-d' forza la modifica della password all'accesso.
$sudochage-d0philippe
Questo file contiene le impostazioni predefinite dei valori.
Suggerimento
Quando si crea un utente, se le opzioni non sono specificate, il sistema utilizza i valori di default definiti in /etc/default/useradd.
Questo file è modificato dal comando useradd -D (useradd -D inserito senza nessun'altra opzione visualizza il contenuto del file /etc/default/useradd).
Definisce il percorso della directory del livello superiore della home directory dell'utente comune.
INACTIVE
Numero di giorni di tolleranza dopo la scadenza della password. Corrisponde al 7° campo del file /etc/shadow. Il valore -1 indica che il periodo di tolleranza è disattivato.
EXPIRE
Definisce la data di scadenza dell'account. Corrisponde all'ottavo campo del file /etc/shadow.
SHELL
Definisce l'interprete dei comandi.
SKEL
Definisce la struttura della directory di login.
CREATE_MAIL_SPOOL
Definisce la creazione della cassetta postale in /var/spool/mail/.
Se non si ha bisogno di un gruppo primario con lo stesso nome quando si creano gli utenti, si può fare in questo modo:
UMASK 022: Ciò significa che il permesso di creare un file è 755 (rwxr-xr-x). Tuttavia, per motivi di sicurezza, GNU/Linux non prevede il permesso x per i file appena creati. Questa restrizione si applica a root (uid=0) e agli utenti ordinari (uid>=1000). Per esempio:
USERGROUPS_ENAB yes: "Quando si elimina un utente con il comando userdel -r, viene eliminato anche il gruppo primario corrispondente." Perché? Questo è il motivo.
Quando viene creato un utente, vengono creati la sua home directory e i suoi file di ambiente. I file della directory /etc/skel/ sono i modelli di file necessari per creare gli utenti.
Questi file vengono copiati automaticamente dalla directory /etc/skel.
.bash_logout
.bash_profile
.bashrc
Tutti i file e le directory collocati in questa directory saranno copiati nell'albero utente al momento della loro creazione.
Il comando su consente di cambiare l'identità dell'utente connesso.
su[-][-ccommand][login]
Esempi:
$sudosu-alain
[albert]$su-root-c"passwd alain"
Opzione
Descrizione
-
Carica l'ambiente completo dell'utente.
-c comando
Esegue il comando sotto l'identità dell'utente specificato.
Se il login non è specificato, sarà root.
Gli utenti standard dovranno digitare la password per la nuova identità.
Suggerimento
You can use the exit/logout command to exit users who have been switched. Si noti che dopo il cambio di utente non esiste una nuova child shell o sub shell, ad esempio:
Quindi, quando si vuole cambiare utente, ricordarsi di non dimenticare il -. Poiché non vengono caricati i file delle variabili d'ambiente necessarie, potrebbero verificarsi problemi nell'esecuzione di alcuni programmi.