Gestione degli utenti

I file che gestiscono gli utenti: /etc/passwd, /etc/group, /etc/shadow. I comandi per gestire gli utenti: adduser, passwd, userdel.

Gestione degli Utenti su Linux / Unix

Unix è un sistema operativo multiuser che, oltre all’utente root, con privilegi di amministrazione, prevede utenti di sistema (usati per eseguire processi e demoni) e utenti umani che utilizzano e accedono in vario modo alla macchina.
La gestione (aggiunta, modifica, cambio password, cancellazione) degli utenti del sistema è tipicamente compito di root, che ha a disposizione su diversi sistemi Unix variegati programmi grafici o comandi testuali per queste operazioni.

I comandi più comuni e standard per gestire gli utenti sono:
useradd [opzioni] nomeutente Aggiunge un utente al sistema. Prevede varie opzioni per definire impostazioni specifiche.
userdel [opzioni] nomeutente Elimina un’utente. Su molti Unix questo comando non cancella la home directory dell’utente.
groupadd [opzioni] nomegruppo Aggiunge un gruppo.
passwd [nomeutente] Modifica la password. Tutti gli utenti, tranne root, possono cambiare solo la propria password.

Il file con l’elenco di tutti gli utenti è, su tutti i sistemi Linux, /etc/passwd, qui ci sono informazioni sulla login dell’utente, la shell utilizzata, la posizione della sua home directory, dove l’utente può liberamente scrivere dati e documenti.
In tutti i Linux moderni, la password, criptata viene scritta nel file
/etc/shadow dove vengono mantenute altre informazioni relative alla gestione della stessa.

/etc/passwd

Il file /etc/passwd è il database degli utenti su ogni sistema Unix. Ad ogni user è dedicata una riga che definisce quali sono i suoi principali attributi. Sui sistemi Unix meno recenti in questo file viene scritta anche la password (criptata), su quelli più recenti viene scritta, generalmente, in /etc/shadow, che ha maggiori restrizioni in termini di sicurezza.

Le righe di /etc/passwd si presentano nella seguente forma:
Username:Password:UserID:GroupID:Info:HomeDirectory:Shell

Username: Nome dell’user, la login con cui può accedere al sistema;
Password: Campo riservato alla password dell’utente. Può essere scritta direttamente in forma criptata o esserci semplicemente una x (la password c’è ma è scritta altrove, di solito in /etc/shadow). Se c’è un * (asterisco) significa che l’utente o non ha una password o la password non è valida (in questo caso non gli è permesso di login);
UserID: ID dell’user;
GroupID: ID del gruppo di appartenenza;
Info: Contiene informazioni sull’utente non necessarie al sistema (nome esteso, numero di telefono, mail ecc…);
HomeDirectory: Indica la directory della home dell’utente;
Shell: Indica la shell di default per quell’utente.

Un esempio:
[diego@vagante diego]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[…]
diego:x:501:503::/home/diego:/bin/bash

Le caratteristiche di /etc/shadow

Storicamente su Unix il file /etc/passwd contiene l’elenco di tutti gli utenti e la loro password in forma criptata.
Per la stessa natura di Unix tutti gli utenti devono poter aver accesso in lettura a questo file, per cui l’esporre le password di tutti, seppur criptate, risultava rischioso per la sicurezza del sistema.

Su tutti i Linux e gli Unix non troppo vecchi, la gestione della password è stata migliorata sia in termini di sicurezza che di versatilità affiancando al normale /etc/passwd la gestione del file /etc/shadow che introduce nuove funzionalità:
– Questo file è leggibile solo da root mentre viene lasciato l’accesso il lettura a /etc/passwd per tutti gli utenti;
– Le password in /etc/shadow sono criptate con algoritmi più complessi e robusti;
– E’ possibile gestire il tempo di scadenza, la durata minima e massima e i tempi di notifica della password.

Notare che:
– se la password è scritta in /etc/shadow, in /etc/passwd c’è solo una x al posto della password criptata.
– se in /etc/passwd il campo password è un * , la password è nulla e l’utente non può accedere al sistema.

/etc/shadow

Il file /etc/shadow è il database delle password sui Unix più evoluti. In esso sono elencate per ogni utente la password (criptata) e vari parametri ad essa connessi (ultima modifica, durata massima e minima, ecc…). Ad esso fanno riferimento diversi files, fra cui /etc/passwd e tutti i comandi per la gestione degli utenti (useradd, userdel, usermod).

Le righe in /etc/shadow si presentano nella seguente forma:
Username:password:lastchange:min:max:warn:inactive:expire:

Username: Il nome dell’utente a cui fa riferimento la password;
Password: Password criptata (13 caratteri). Puo assumere anche altri valori quali * (asterisco) che sta ad indicare che l’utente è disabilitato e !! (o nessun carattere) che significa che l’utente non ha password (cosa molto pericolosa in termini di sicurezza);
lastchange: Numero di giorni compresi fra il 1 gennaio 1970 e l’ultima modifica della password;
min: Minimo numero di giorni dall’ultima data di modifica prima di poter nuovamente cambiare la password;
max: Durata massima della password (sempre in giorni);
warn: Numero di giorni di preavviso all’utente prima di invalidare la password;
inactive: Numero di giorni di inattività possibili per quell’utente.
expire: Data dopo la quale quel login non può più essere usato.

Un esempio da un RedHat Linux standard evidenzia che di default non sono previste scadenze per la password e vari altri parametri:
[diego@vagante diego]$ cat /etc/passwd
:root:$1$ÐQEXe5ÀJ$Jffvxi5UaGHpaMckCsKH0:11628:0:99999:7:::
:daemon:*:11628:0:99999:7:::
[…]
:xfs:!!:11628:0:99999:7:::

/etc/group

Il file /etc/group contiene l’elenco dei gruppi di utenti presenti nel sistema. Ad ogni gruppo è associata una riga nella quale si trova l’IDgroup e l’elenco degli utenti che ne fanno parte.
Alcuni Unix creano un nuovo gruppo per ogni nuovo utente, altri hanno il gruppo “users” in cui vengono automaticamente inseriti tutti gli utenti aggiunti al sistema.
Di fatto i gruppi servono per gestire con maggiore flessibilità l’accesso ai file e di conseguenza l’uso delle risorse.

Le righe di /etc/group si presentano nella seguente forma:
GroupName:Password:GroupID:User1,User2,...,UserN

GroupName: Indica il nome del gruppo;
Password: Indica la password del gruppo. Solitamente non viene data una password al gruppo ma solo ai singoli utenti;
GroupID: Indica l’ID associato a quel gruppo;
User1,User2,...,UserN: E’ l’elenco degli users appartenenti a quel gruppo. I nomi dei singoli users devono essere sparati da una virgola.

Un esempio:
[diego@vagante diego]$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
[…]
wheel:x:10:root,macno

adduser

Crea un utente o modifica le proprietà di default per la creazione degli utenti.

Creazione di un nuovo Utente
adduser [opzioni] login-name
Modifica delle impostazioni d di un nuovo Utente
adduser -D [opzioni]

Opzioni per la creazione di un nuovo utente
-c [comment] Commento all’interno di /etc/passwd
-d [home_dir] Specifica la home dir del nuovo utente
-e expire-date Indica la data di scadenza dell’account, formato della data  YYYY-MM-DD
-f inactive_days Indica il numero di giorni, che intercorrano fra la data di expire della password e la disabilitazione dell’account
-g group Indica il primo gruppo di appartenenza. Per poter utilizzare questa opzione il gruppo deve gia’ esistere
-G group Indica gli altri gruppi di cui il nuovo utente fara’ parte
-m La home dir dell’utente verra’ creata se non esiste
-p Identifica la password cryptata
-s Specifica la shell dell’utente
-u Specifica l’UID dell’utente

Opzioni per la modifica delle opzioni di default
-b default_home Setta il prefix per la creazione delle home di default
-e default_expire_date Setta la data di expire dell’ account
-f default_inactive Indica il numero di giorni, che intercorrono fra la data di expire della password e la disabilitazione dell’account.
-g default_group Identifica il gruppo iniziale di default
-s default_shell Identifica la shell di default

passwd

Comando che permette di settare, modificare la password di un utente.
Root può modificare le password di ogni utente, mentri gli utenti normali possono modificare solo la propria.

passwd  [-d] [-S] [username]
-d Disabilita  la password per l’utente
-S Verifica lo status della password dell’utente.
Esempi
passwd Cambia la password dell’utente corrente. La password va digitata due volte e, in certi sistemi, deve avere un numero minimo di caratteri.
passwd al Cambia la password dell’utente al. Solo root può cambiare le password degli altri utenti.

userdel

Cancella un account e i relativi file

userdel [-r] login-name
-r Oltre a cancellare l’account vengono cancellate anche la home directory (di default viene lasciata inalterata) e la posta.

usermod

Comando che permette di cambiare le impostazioni di un account creato precedentemente.

usermod [opzioni] login-name
-c comment Modifica, aggiunge il commento
-d home_dir Modifica la home_dir dell’utente
-e expire_date Modifica l’expire_date, ovvero quando l’account verrà disabilitato
-f inactive_days Modifica il numero di giorni che intercorrono fra la scadenza della password e la disabilitazione dell’account
-g initial_group Modifica il gruppo primario
-G groups Modifica i Gruppi secondari
-l login Cambia il nome di login dell’utente
-p password Modifica la password (criptata)
-s shells Modifica la shell di default dell’utente
-u UID Modifica l’UID
-L Esegue il lock dell’account
-U Operazione inversa del lock, ovvero riabilita l’account

usermod -G [gruppo] [utente]; groups [utente]

Aggiunta di un utente ad un gruppo, e verifica dell’operazione.

Tramite l’opzione -G di usermod è possibile aggiungere un utente presente nel sistema ad un gruppo:
[root@pluto root]# usermod -G sysadm homer; groups homer
homer : simpson sysadm

In questo caso l’utente homer viene aggiunto al gruppo sysadm, quindi si verifica che l’operazione sia andata a buon fine con groups. E’ possibile vedere che l’utente appartiene ai gruppi simpson e sysadm.

groupdel

Permette di cancellare un gruppo.
Ricordati che un gruppo primario di un account valido non può essere cancellato.

groupdel group

groupadd

Crea un nuovo gruppo

groupadd [-g gid [-o]] [-r] [-f] group
-g Valore numerico del group ID
-r Identifica la creazione di un gruppo di sistema ovvero con GID inferiore a 499

groupmod

Comando che ti permette di modificare le caratteristiche di un gruppo, creato precedentemente.

groupmod [-g gid [-o]] [-n group_name ] group
-g Identifica l’UID del gruppo
-o Flag che assicura l’uso di un UID non univoco
-n group_name Indica il nuovo nome del gruppo

/etc/skel

Directory contenente i file predefiniti che vengono copiati nella home di ogni nuovo utente quando viene creato con le impostazioni di default.

Ecco l’elenco dei file contenuti in /etc/skel di una redhat 7.2 con impostazioni di default.
Per la maggior parte si trattano di file riguardanti le impostazioni delle shells o configurazioni per-user di programmi installati.

neo@dido neo]$ ls -latr /etc/skel/
total 28
File contenenti le impostazioni della bash
-rw-r–r–    1 root     root          124 Jul  9  2001 .bashrc
-rw-r–r–    1 root     root          191 Jul  9  2001 .bash_profile
-rw-r–r–    1 root     root           24 Jul  9  2001 .bash_logout
File contenenti le impostazioni di emcas
-rw-r–r–    1 root     root          820 Jul 30  2001 .emacs
File contenenti le impostazioni dell’utility screen
-rw-r–r–    1 root     root         3511 Aug  3  2001 .screenrc
drwxr-xr-x    2 root     root         4096 Jul 16 10:30 .
drwxr-xr-x   52 root     root         4096 Oct 17 12:36 ..

Aggiungere manualmente un utente su un sistema Unix

Su Unix sono comuni diversi comandi e programmi per gestire gli utenti del sistema (es: useradd, usermod userdel).
Quelle che questi strumenti fanno automaticamente sono operazioni sul sistema che si possono fare manualmente.
Ovviamente si consiglia di usare tool dedicati come
useradd e groupadd per queste attività.

Per aggiungere un utente al sistema si deve:
– Essere utente root, o avere analoghi privilegi.
– Editare
/etc/passwd aggiungendo una riga per il nuovo utente, facendo estrema cura al formato del file;
– [Non indispensabile] Editare
/etc/group aggiungendo un nuovo gruppo per il nuovo utente e/o aggiungendo il nuovo utente ad un gruppo di usenti generici;
– Se esiste il file
/etc/shadow editarlo aggiungendo una nuova riga per l’utente;
– Creare la home directory del nuovo utente:
mkdir /home/nomeutente;
– Ricreare l’ambiente base (script di inizializzazione shell o altri programmi) nella nuova home:
cp /etc/skel/* /home/nomeutente/;
– Modificare il proprietario della home:
chown -R nomeutente:nomegruppo /home/nomeutente;
– Modificare i permessi della home:
chmod -700 /home/nomeutente;
– Modificare la password dell’utente:
passwd nomeutente

Questa è una procedura generalmente valida su ogni Linux e Unix, è utile conoscerla, ma resta più comodo e raccomandabile usare i comandi di gestione utente (testuali o grafici) del proprio Unix.

/etc/login.defs

File di configurazione, sui Linux basati sulla distribuzione RedHat che contiene tutte le opzioni di default sugli utenti del sistema.

[neo@dido skel]$ cat /etc/login.defs
# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR
Maildir
MAIL_DIR
/var/spool/mail
#MAIL_FILE
.mail
# Password aging controls:
#
#    PASS_MAX_DAYS    Maximum number of days a password may be used.
#    PASS_MIN_DAYS    Minimum number of days allowed between password changes.
#    PASS_MIN_LEN    Minimum acceptable password length.
#    PASS_WARN_AGE    Number of days warning given before a password expires.
#
PASS_MAX_DAYS
99999
PASS_MIN_DAYS
0
PASS_MIN_LEN
5
PASS_WARN_AGE
7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN
500
UID_MAX
60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN
500
GID_MAX
60000
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD
/usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is ORed with the -m flag on
# useradd command line.
#
CREATE_HOME
yes

useradd [user]; echo “[user]” | passwd –stdin [user]; chage -d0 [user];

Prima creazione di un utente con cambio password forzato.

Tra i compiti dell’amministratore di sistema vi è quello di gestire gli account utente. Solitamente, per ogni nuovo user, si crea un nuovo account con nome e password uguali, ricordando poi all’utente di modificare la propria password per non creare punti deboli nella sicurezza del sistema.

[root@Apollo13 root]# useradd morpheus ; echo "morpheus" | passwd --stdin morpheus; chage -d0 morpheus;
Changing password for user morpheus.
passwd: all authentication tokens updated successfully.

Questa command line permette di creare l’utente useradd [user], quindi ne setta la password uguale al nome echo "[user]" | passwd --stdin [user] e successivamente forza il cambiamento della password al primo accesso con chage -d0 [user].

homer@Joker:/opt# ssh morhpeus@192.168.0.97
homer@192.168.0.97’s password:
*******
You are required to change your password immediately (root enforced)
Changing password for morpheus
(current) UNIX password:
********
New password:
********
Retype new password:
*********
[morpheus@Apollo13 homer]$

Il sistema richiede il cambio password forzato al primo login

L’utilizzo di questo command line, è consigliato solo nel caso in cui l’accesso del nuovo utente al sistema avvenga immediatamente, pena un’alta vulenerabilita’ delllo stesso data dall’uguaglianza di nome e password.

Suse 9: Users management

Suse’s handling of users and groups is similar to the one of most Linuxes:
/etc/passwd contains the list of the systems’ users, with the usual logic;
/etc/shadow stores the crypted passwords and additional data about account expiration, notification times and the additional data provided by the shadows utilities.
/etc/group lists the system’s groups with a logic similar to the one of many Unixes (but not the private group scheme where each user has his own group used in distros like RedHat).
The file
/etc/login.defs contains various parameters of the default settings related to the users such as login retries and timeouts, default password expiration, maximum and minimum days for password changing, default UID and GID ranges (normal users start from UID 500 and GID 1000), default umask (022).

The management utilities are the usual ones:
useradd userdel usermod Add, remove and modify the system users
groupadd groupdel groupmod Add, remove and modify the system’s groups.
Yast obvious gives the opportunity to configure easily all the parameters related to users management and permits the authentication to a remote server via various protocols: NIS, NIS+, Kerberos, LDAP, SMB.

Gestire gli Utenti su Solaris

La gestione degli utenti di un sistema Solaris è simile a quella di ogni Unix e Linux.
Vediamone gli strumenti e la logica.

Ogni utente su Solaris (e su altri Unix) ha le seguenti caratteristiche:
User name o login – Il nome, univoco, con cui l’utente è riconosciuto da sistema.
UserID – Un numero identificativo dell’utente. Univoco.
GroupID – L’ID del gruppo di utenti a cui l’utente appartiene.
Comment – Una stringa che identifica l0utente. Può essere il suo nome e cognome per esteso.
Shell – La shell che viene eseguita quando l’utente esegue il login
Home – Il PATH della directory in cui si ritrova l’utente al login e in cui ha tutti i permessi per  salvarci file e documenti personali.
Password – La password, che, associata al login, permette all’utente di accedere al sistema
Password Status – Indica se la password è disattivata, se va cambiata al successivo login dell’utente, se non esiste perchè l’utente viene usato solo dal sistema
Password Min Change – Quanti giorni minimo possono passare prima di un cambio password
Password Max Change – Quanti giorni massimo può durare la password
Password Max Inactive – Quanti giorni l’account può rimanere inattivo prima di essere disattivato
Password Expiration Date – La data (ggmmaa) di scadenza della password
Password Warning – Quanti giorni prima della scadenza l’utente viene avvisato che deve cambiare password.

La gestione degli utenti può essere fatta con admintool se si vuole lavorare in ambiente grafico oppure con i comandi shell useradd, userdel, usermod, groupadd, groupdel, groupmod, passwd.
Il file di sistema in cui sono contenuti i dati relativi agli utenti sono, come in ogni Unix recente: /etc/passwd, /etc/shadow, /etc/group.


Per chi è abituato al comando useradd su Linux va sottolineato che questo di default NON crea l’home directory dell’utente. Per farlo bisogna specificare l’opzione -m:
useradd -m al crea, oltre alle entry in /etc/passwd e /etc/shadow per il nuovo utente, anche la sua home directory: /home/al e ci copia (come in Linux) tutti i file contenuti nella directory di template /etc/skel in modo da creare per il nuovo utente un ambiente coerente con quello degli altri utenti.
I comandi shell per gestire gli utenti hanno varie opzioni che permettono di definire tutti i parametri sopra esposti, che sono facilmente configurabili anche con admintool o possono essere modificati a amno (solo per gli esperti) editando direttamente i file di sistema.

chage

Utility che permette di amministrare la scadenza delle password dei vari utenti del sistema

Modalità di editing
chage [-m mindays] [-M maxdays] [-d lastday] [-I inactive] [-E expiredate] [-W warndays] user

Modalità di visualizzazione delle informazioni
chage -l [user]
-m Indica i giorni minimi per poter cambiare password
-M Indica il numero massimo di giorni di validità della password.
-d Indica il numero del giorno in cui è stata cambiata la password
-I Indica il numero di giorni di intermezzo fra la scadenza della password e la disabilitazione dell’account
-E Indica la data di scadenza della password
-W Indica il numero di giorni per i quali il sistema avvisa che la password sta scadendo

chsh

Change shell, utility che permette di cambiare la shell di default di un utente.

chsh [ -s shell ] [ -l ] [ -u ] [ username ]
-s, --shell [shell] Specifica la shell di default dell’utente
-l, --list-shells Visualizza le shell disponibili (verifica in /etc/shells)

Come cambiare nome al vostro PC Linux

Potete assegnare un nome al vostro PC Linux durante la fase di installazione, oppure, come descriverò adesso, potete assegnarne uno dopo l’installazione.

Ho testato questa procedura su Red Hat 9.
# cd /etc/sysconfig
# vi network
Adesso siete nell’editor di testo vi . Se non sapete come si usa guardate prima la guida proposta su questo sito. Ad ogni modo se premete il tasto a o il tasto i entrerete in modalità inserimento. Supponiamo che vogliate chiamare il vostro PC Pippo. Modificate la voce hostname così:

HOSTNAME=Pippo

Quindi come di consueto premete ESC :wq INVIO.
Dopodiché:
# cd /etc/
# vi hosts
Adesso modificate così ciò che compare accanto alla scritta 127.0.0.1 :

127.0.0.1   Pippo localhost.localdomain localhost

Ancora una volta premete ESC :wq INVIO.

Il vostro PC adesso ha cambiato nome in Pippo.


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: