# Passwd

passwd è un comando tipico dei sistemi operativi Unix e Unix-like che consente di assegnare o cambiare la password di autenticazione di un utente del sistema.

## Descrizione

Il file di configurazione di sistema in cui sono memorizzate alcune delle informazioni relative agli account presenti nel sistema è
come ad esempio la corrispondenza tra un nome utente ed il suo UID numerico, la home directory di un utente e l'indicazione della shell testuale da eseguire dopo l'autenticazione. Un tempo esso memorizzava direttamente anche le password cifrate di autenticazione degli utenti, ma poiché esso deve rimanere leggibile da tutti gli utenti per consentire l'accesso alle altre informazioni, era molto semplice tentare attacchi a forza bruta per scoprire le password degli altri utenti. Nei sistemi moderni, le password cifrate sono normalmente memorizzate nel file /etc/shadow, accessibile al solo amministratore del sistema (l'utente root) ed ai programmi che effettuano l'autenticazione al sistema.

## Il comando passwd

Un utente privo di particolari privilegi può usare passwd per cambiare la propria password: in questo caso viene richiesto di immettere la password attuale, e poi di inserire due volte la nuova password.
Quando viene eseguito da un utente privilegiato (l'utente root), passwd consente di impostare la password anche di qualunque altro utente del sistema, senza richiedere l'immissione di quella attuale.
Per motivi di sicurezza, le password non sono visualizzate mentre le si digitano.
Il file eseguibile relativo a tale comando si trova solitamente nella directory /usr/bin ed è di proprietà dell'utente root con i permessi setuid e setgid, per permetterne l'esecuzione anche da parte di utenti non privilegiati.

### Sintassi

La sintassi generale di passwd è la seguente:
dove il parametro utente può essere specificato solo dall'utente root per indicare l'utente del sistema di cui si vuole impostare o cambiare la password di autenticazione. Se tale parametro non è specificato, passwd procede ad impostare la password dell'utente che esegue il comando.
L'impostazione o modifica di una password di autenticazione al sistema comporta la modifica uno dei due file seguenti:
* /etc/passwd, nei sistemi operativi in cui gli utenti vengono ancora conservati direttamente in tale file;
* /etc/shadow, leggibile al solo utente root, che associa ad ogni utente un checksum della sua password di autenticazione.
In entrambi i casi si tratta di file di testo, che quindi possono essere aperti con editor di testo come ad esempio Vi, Emacs, Gedit, Kate o Notepad.

## Il file /etc/passwd

Il file di configurazione /etc/passwd conserva informazioni locali sugli utenti del sistema; un esempio di tale file è il seguente:
Ogni riga descrive un utente, ed è composta da 7 campi separati dal delimitatore ":" (due punti). I campi indicano, nell'ordine:
* Il nome utente.
* Il campo un tempo dedicato alla password cifrata dell'utente. Normalmente è avvalorato con x per indicare che essa è memorizzata altrove.
* Lo UID numerico dell'utente.
* Il GID numerico del gruppo a cui l'utente appartiene, che prende il nome di gruppo principale (ciascun utente appartiene ad almeno un gruppo, uno dei quali è detto principale, e gli altri secondari).
* Informazioni aggiuntive sull'utente, (nome completo, numero di stanza, numero di telefono di casa, numero di telefono d'ufficio, altre informazioni), chiamate anche GECOS, dal sistema operativo General Electric Comprehensive Operating System, in quanto tale campo, agli albori dello sviluppo di Unix, era destinato a contenere le informazioni di identificazione dell'utente presso i computer dotati di tale sistema operativo, in modo che gli utenti Unix li potessero utilizzare più comodamente.
* La home directory dell'utente (spazio in genere riservato all'utente per i suoi dati).
* La shell di login (tra quelle messe a disposizione dal file /etc/shells).
Ad esempio:
| Nome utente | Campo per password cifrata | Identificativo dell'utente | Identificativo del gruppo | Informazioni aggiuntive | Home directory | Shell di login |
| mariorossi | x | 1000 | 1000 | Mario Rossi,218,888 123456,777 987654,vendite | /home/mariorossi | /bin/bash |
Le informazioni aggiuntive sono ad esempio mostrate dal servizio finger, ed in alcuni sistemi è possibile modificarle tramite il comando chfn (ove disponibile).
Gli utenti elencati non sono necessariamente persone fisiche: nell'esempio si possono vedere anche utenze di sistema tramite i quali operano alcuni dei servizi del sistema operativo, in modo da limitarne i privilegi.
Occorre anche tenere presente che quanto elencato nel file non è necessariamente un elenco completo degli utenti del sistema, in quanto essi, a seconda della configurazione, possono essere anche definiti in un server NIS+, o in un servizio di directory accessibile via LDAP. Per ottenere un elenco completo si può ricorrere al comando getent, ove disponibile, ad esempio con:

## Comandi collegati

* chfn
* finger (Unix)
* chage
* login
* su
* useradd