Difficulté
Si c’est simplement l’outil qui vous intéresse, ça ne vous posera pas de problèmes, vous n’avez qu’à le copier-coller et vous êtes prêts. Si l’aspect théorique vous passionne, ça sera un peu plus difficile – mais aussi un peu plus passionnant !
Requis
Un PC sous Linux. Si vous êtes sous Windows, il va falloir « traduire » l’algorithme du générateur de code dans un language que vous connaissez et je ne pourrai pas le faire pour vous !
Contexte
Vous avez besoin d’un mot de passe jetable.
Pourquoi faire ?
Il existe une multitude de raisons de vouloir générer un mot de passe à usage unique. Comme expliqué dans cet article qui explique comment faire tomber le mot de passe d’un fichier zip, les mots de passe composés uniquement de chiffres ou d’un mot dans une langue étrangère tombent très rapidement. Il vous faudra donc le changer régulièrement.
La plupart du temps, on vous demandera le mot de passe actuel avant de le changer. Mais ce n’est pas toujours le cas. Par exemple, si vous envoyez des fichiers sur le net via le protocole FTP ou SSH, l’on vous demandera votre mot de passe. Mais il arrive que si vous voulez changer le mot de passe, on ne vous demande pas le mot de passe actuel. C’est là que les mots de passe à usage unique montrent tout leur intérêt.
Admettons que vous vous auto-hébergez ou que vous avez un site ou un ensemble de sites et que vous décidiez l’utiliser YunoHost pour gérer la partie technique. Pour envoyer des fichiers sur le serveur, vous aurez besoin d’un accès SFTP. Que vous utilisiez FileZilla ou un terminal en ligne de commande pour le faire, on vous demandera le mot de passe. La suite est alors facile à deviner.
Comment faire ?
Il existe bel et bien des outils en ligne pour générer des mots de passe. S’il vous plait, je vous en conjure, ne les utilisez pas ! On ne sait pas ce qu’il se passe lorsque vous êtes en ligne, on ne sait pas ce qu’il y a dans les cookies et dans les données en cache et surtout, on ne rigole pas avec les mots de passe !
Ouvrez un terminal et créez un fichier qui aura l’extension .sh pour signaler que ce sera un script shell. Vous pouvez par exemple utiliser vi, vim, nano ou votre éditeur favori. Pas besoin d’être sudo.
$vi passwd.sh
Cela vous ouvrira un fichier vide en terminal. Tout ce qu’il vous restera à faire sera de taper (ou de copier-coller) le code suivant.
#!/bin/bash
gener(){
echo "Voici votre mot de passe jetable." chars="0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBNéèçà!:.$^=+"
for ((i=1; i<=$RANDOM%10 + 15; i++)); do
echo -n ${chars:$(($RANDOM%${#chars})):1}
done
echo
}
gener
NDLR : je suis désolé pour l’indentation merdique de ce code, mais ça provient de l’éditeur d’articles et pas de mon code.
C’est tout pour la partie code. Encore une fois : si vous n’êtes pas dans l’informatique pure et dure, ne cherchez pas à savoir comment ça fonctionne, contentez-vous de copier-coller et d’enregistrer le fichier. Si vous avez utilisé vi, tapez le bouton Echap, puis tapez dans l’ordre les touches « : », « w », « q » et « Entrée » de votre clavier.
Il ne nous reste plus qu’à rendre le script exécutable ! Tapez ceci en ligne de commande.
$chmod +x passwd.sh
Utilisation du script
Dès lors, il vous suffira de vous placer dans le dossier contenant votre script et de taper ceci en ligne de commande.
$./passwd.sh
Et voilà le résultat. A chaque fois que vous exécutez la commande, un résultat différent en ressortira.
Le tutoriel s’arrête ici, mais rien ne vous empêche d’en continuer la lecture pour aller plus loin. Attention, à partir d’ici, je m’adresse aux Linuxiens confirmés qui veulent savoir ce qu’ils font. Les autres, rassurez-vous, ce n’est que de la théorie.
Comment ça fonctionne ?
Comme vous le savez, tout les scripts en bash shell commencent par « #!/bin/bash«
Nous déclarons une fonction que j’ai arbitrairement appelé gener(), mais libre à vous de l’appeler comme vous voulez. Le script n’est constitué que de cette fonction que nous appelons une seule fois dans la dernière ligne. Encore une fois, si pour une raison ou une autre vous avez besoin de générer plusieurs mots de passe, sentez-vous libre d’adapter le script et de placer l’appel de la fonction dans une boucle for !
A l’intérieur de cette fonction, j’ai commencé par un bête « echo » agrémenté d’une phrase humaine. Cela permet de rendre le résultat humainement lisible.
Nous déclarons un string qui contient tous les caractères candidats pour figurer dans le mot de passe. Il y a des chiffres, des lettres en majuscules et en minuscules et des caractères spéciaux tels que des accents. Vous pouvez en rajouter mais prudence !
Ensuite, nous allons appeler une boucle for un nombre aléatoire de fois, entre 15 et 25 fois.
A chaque itération de cette boucle for, nous allons « imprimer » un caractère aléatoire figurant dans la chaine de caractères. L’argument -n du echo permet de ne pas faire de retour à la ligne.
Concrètement, ce que fait la ligne, c’est imprimer le n-ième caractère du string, n étant situé entre 0 et le nombre total de caractères de la chaine de caractères, et d’en imprimer qu’un seul – pour éviter les débordements au cas où le random tombe à la fin. Après la boucle for, nous appelons un simple echo vide. Il n’est pas obligatoire, il permet simplement de faire un retour à la ligne et de rentre le terminal plus lisible.
Pour aller plus loin
Un utilisateur de Mastodon, réseau social dont je rédigerai prochainement un article, m’a signalé que l’utilisation du %RANDOM n’était pas très sûr et qu’il était possible de renforcer la sécurité du script. En effet, en informatique, il est très difficile de parler d’aléatoire puisque les machines raisonnent de manière bien trop logique.
A vous d’adapter le script à votre convenance !
Hefka le NekoPunk
Laisser un commentaire