Quel est le moyen le plus simple de masquer les entrées de l'utilisateur?
Ne pas l'afficher!
Cacher les mots de passe lors de la frappe est une vieille tradition. Cela a du sens du point de vue de la sécurité dans la plupart des contextes: si quelqu'un vous regarde par-dessus votre épaule, vous ne voulez pas vous permettre de voir facilement ce que vous tapez. (Certaines consignes de sécurité modernes, par exemple 1 2 3 4 5 , recommandent toutefois de pouvoir afficher le mot de passe, car cela permet à l’utilisateur de choisir des mots de passe plus complexes et d’être sûr de ne pas perdre son temps à réparer inaperçu. Le plus gros risque n’est pas de surfer sur l’épaule, mais plutôt de deviner la force brute, peut-être même hors ligne.)
Après avoir décidé que le mot de passe devait être caché, les développeurs devaient décider comment le faire. Le terminal a un mode dans lequel l'entrée utilisateur est affichée (écho activé) et un mode dans lequel l'entrée utilisateur n'est pas affichée (écho désactivé). Le mode écho désactivé a une existence intrinsèque: c'est le mode dans lequel le terminal ne fait pas le travail supplémentaire consistant à faire écho aux entrées de l'utilisateur. Ce mode doit également exister pour les applications où la saisie d'une touche n'insère pas ce caractère, mais invoque un raccourci d'application lié à cette touche. Ainsi, les commandes telles passwd
que le réglage du terminal en mode écho lorsqu’elles lisent un mot de passe.
L'impression d'astérisques pour chaque caractère nécessiterait un travail d'implémentation supplémentaire pour un bénéfice relativement modeste, ce que les responsables de la mise en œuvre de la passwd
commande n'ont pas eu envie de faire. Il n'y a pas de mode terminal pour l'impression des astérisques, car il s'agirait d'une fonctionnalité très spécialisée, utile uniquement lors de la saisie de mots de passe.
En passant, si vous souhaitez voir votre mot de passe lors de sa modification, vous pouvez l'utiliser cat | passwd
(du moins sur certains systèmes - certaines versions de passwd
nécessitent une option du type cat | passwd --stdin
et d'autres ne l'acceptent pas du tout). (Vous pouvez même le faire { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, mais ne le faites pas: cela sauvegarderait les mots de passe dans l'historique du shell, ce qui risquerait beaucoup plus de fuir.) Organiser pour cela avec des commandes qui lisent le mot de passe depuis le terminal plutôt que ce qui est fait. leur entrée standard, telle que sudo
ou ssh
, est plus complexe; Si vous avez une interface graphique disponible, vous pouvez utiliser ssh-askpass, qui indique le nombre de caractères que vous avez saisis ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
pour sudo; pour ssh, c'est compliqué de l'appeler depuis un terminal).