Table of Contents

Comment générer le mot de passe par commande

Domaines du fichier /etc/shadow

Le fichier /etc/shadow stocke les mots de passe utilisateur sous forme de hachages dans un format particulier.

Chaque ligne dans /etc/shadow est une chaîne avec 9 champs séparés par ':'. Une ligne typique ressemble à ceci:

aychedee:$6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/:15405:0:99999:7:::

Les neuf domaines différents sont:

La plupart de ces champs ne sont généralement pas utilisés par les distributions Linux. Les plus importants sont le nom d'utilisateur et le hachage. Le champ de hachage lui-même est composé de trois champs différents. Ils sont séparés par '$' et représentent:

Génération du mot de passe

Générer une chaîne aléatoire

/dev/urandom permet de générer des mots de passe à la volée sous Linux.

Voici un exemple d'utilisation :

    < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8

Quelques explications sur le fonctionnement de cette commande :

Si l'on souhaite avoir un retour chariot en fin de ligne, on pourra simplement utiliser echo :

    echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8`
Créer le hash du mot de passe

openssl permet de créer la chaîne de hachage.

echo 'password' |openssl passwd -1 -salt QidasQKZ -stdin | cut -d" " -f1

Substitution du mot de passe

Pour substituer le mot de passe dans un fichier de type shadow:

user1:motdepassecrypté1:655196:0:99999:7::
user2:motdepassecrypté2:655656:0:99999:7:::
user3:motdepassecrypté3:655765:0:99999:7:::
user4:motdepassecrypté4:655999:0:99999:7::::

utiliser le script suivant:

sed '/^'"$user"'/s/\([^:]*\):[^:]*:\(.*\)/\1:'"$newPwd"':\2/' 1erFichier

Pour substituer le mot de passe dans un fichier de type XML:

user1:
password = motdepassecrypter1
lastupdate = 1234133
flags =

user2:
password = motdepassecrypter2
lastupdate = 1234333
flags =

user3:
password = motdepassecrypter3
lastupdate = 1234633
flags =

user4:
password = motdepassecrypter4
lastupdate = 1234933
flags =

Utiliser le scripte suivant

sed '/^'"$user"'/{N; s/\(.* = \).*/\1'"$newPwd"'/}' 2emeFichier

Pour changer un mot de passe en une ligne de commande, exécuter simplement:

echo "linuxpassword" | passwd --stdin linuxuser

ou

echo -e "linuxpassword\nlinuxpassword" | passwd linuxuser

Pour mettre à jour son propre mot de passe en tant qu'utilisateur normal, utiliser:

echo -e "your_current_pass\nlinuxpassword\nlinuxpassword" | passwd