Shadow password

Come abbiamo visto, /etc/passwd ha permesso di scrittura solo per il superuser ma è leggibile da qualunque utente; pertanto se un attaccante ottiene accesso al sistema tramite uno qualsiasi dei suoi account ha a disposizione gli hash di password ed i salt di tutti gli utenti del sistema. A questo punto può utilizzarli, ad esempio, per un attacco di tipo dizionario, cifrando le parole del dizionario con i giusti salt e confrontandole con le password cifrate degli utenti.
Una volta ciò non era considerato un grande problema per la sicurezza del sistema, in quanto l’hardware dell’epoca era troppo lento per applicare efficientemente l’algoritmo DES modificato; individuare una password ben scelta era quindi praticamente impossibile.
Col passare del tempo, la crescita esponenziale della potenza di calcolo degli elaboratori ed alcune implementazioni più efficienti dell'algoritmo DES modificato hanno reso più concreto tale rischio. Pertanto oggigiorno praticamente tutti i sistemi Unix adottano il meccanismo delle shadow password.

Tale meccanismo prevede la modifica di /etc/passwd, in modo da inserire ne campi relativi alle password un separatore speciale (tipicamente una 'x'); gli altri campi restano identici. Una tipica entrata di /etc/passwd diventa quindi

andrea:x:500:500:Andrea Raiconi:/home/andrea:/bin/bash

In alternativa, in alcune versioni i campi password di /etc/passwd possono contenere al posto del separatore speciale delle stringhe casuali, in modo da ingannare un eventuale attaccante che crede di trovarsi di fronte ad un normale file delle password.
Le password cifrate degli utenti, oltre ad alcune informazioni opzionali sull'invecchiamento delle password, vengono spostate nel file
/etc/shadow, che può essere letto (e ovviamente scritto) solo da root.

Ogni entrata del file /etc/shadow sarà del tipo

andrea:$1$QlgwTwD.$3OKIJPKSMFU0D6zmVC9u20:12153:0:99999:7:::

I campi in ogni entrata sono nove: