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.
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
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.
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:::
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
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
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.
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.
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
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.
Permette di cancellare un gruppo.
Ricordati che un gruppo primario di un account valido non può essere cancellato.
groupdel group
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
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
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 ..
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.
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
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 [email protected]
[email protected]'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'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.
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.
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
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
)
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.
Albe