Qual è il modo più semplice per nascondere l'input dell'utente?
Non visualizzarlo!
Nascondere le password quando vengono digitate è una vecchia tradizione. In un certo senso ha senso dal punto di vista della sicurezza nella maggior parte dei contesti: se qualcuno ti guarda alle spalle, non vuoi rendere facile vedere cosa stai scrivendo. (Alcune linee guida di sicurezza moderne, ad es. 1 2 3 4 5 , raccomandano comunque di avere un'opzione per rendere visibile la password, perché ciò consente all'utente di scegliere password più complesse e ha la certezza che non passerà il tempo a riparare invisibile errori di battitura: il rischio maggiore non è il surf sulle spalle, è un'ipotesi di forza bruta, possibilmente offline.)
Avendo deciso che la password doveva essere nascosta, gli implementatori dovevano decidere come farlo. Il terminale ha una modalità in cui viene mostrato l'input dell'utente (eco attivo) e una modalità in cui l'input dell'utente non viene visualizzato (eco disattivato). La modalità echo off ha un'esistenza intrinseca in un certo senso: questa è la modalità in cui il terminale non svolge il lavoro extra di eco dell'input dell'utente. Questa modalità deve esistere anche per le applicazioni in cui la digitazione di un tasto non inserisce quel carattere, ma invoca invece alcuni collegamenti alle applicazioni associati a quel tasto. Quindi comandi come passwd
impostare il terminale in modalità eco mentre leggono una password.
La stampa di asterischi per ciascun personaggio richiederebbe un lavoro di implementazione extra per un vantaggio relativamente piccolo, cosa che gli implementatori del passwd
comando non hanno avuto voglia di fare. Non esiste una modalità terminale per la stampa di asterischi perché sarebbe una funzione molto specializzata, utile solo quando si inseriscono le password.
A proposito, se vuoi vedere la tua password quando la cambi, puoi usare cat | passwd
(almeno su alcuni sistemi - alcune versioni passwd
richiedono un'opzione simile cat | passwd --stdin
e altre non la accettano affatto). (Puoi anche farlo { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, ma non farlo: salverebbe le password nella cronologia della shell, da cui c'è molto più rischio di perdite.) Organizzarlo con comandi che leggono la password dal terminale piuttosto che qualunque cosa sia il loro input standard, come sudo
o ssh
, è più complesso; se hai una GUI disponibile, puoi usare ssh-askpass che mostra quanti caratteri hai digitato ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
per sudo; per ssh è complicato quando lo invochi da un terminale).