Was ist die einfachste Art, Benutzereingaben auszublenden?
Nicht anzeigen!
Das Verbergen von Passwörtern während der Eingabe ist eine alte Tradition. In den meisten Kontexten ist dies sicherheitstechnisch sinnvoll: Wenn Ihnen jemand über die Schulter schaut, möchten Sie nicht einfach erkennen, was Sie eingeben. (In einigen modernen Sicherheitsrichtlinien, z. B. 1 2 3 4 5, wird jedoch empfohlen, das Kennwort sichtbar zu machen, da der Benutzer dann komplexere Kennwörter auswählen und sicher sein kann, dass er seine Zeit nicht mit unsichtbaren Korrekturen verbringt Das größte Risiko besteht nicht im Schulter-Surfen, sondern im Rätseln, möglicherweise offline.)
Nachdem entschieden wurde, dass das Passwort ausgeblendet werden soll, mussten die Implementierer entscheiden, wie es gemacht werden soll. Das Terminal verfügt über einen Modus, in dem Benutzereingaben angezeigt werden (Echo ein), und einen Modus, in dem Benutzereingaben nicht angezeigt werden (Echo aus). Der Echo-Aus-Modus ist in gewisser Weise inhärent vorhanden: In diesem Modus übernimmt das Terminal nicht die zusätzliche Arbeit, Benutzereingaben zurückzugeben. Dieser Modus muss auch für Anwendungen vorhanden sein, bei denen durch das Eingeben eines Schlüssels nicht dieses Zeichen eingefügt wird, sondern stattdessen eine Anwendungsverknüpfung aufgerufen wird, die an diesen Schlüssel gebunden ist. Befehle wie das passwd
Versetzen des Terminals in den Echo-Off-Modus, während ein Kennwort gelesen wird.
Das Drucken von Sternchen für jedes Zeichen würde zusätzliche Implementierungsarbeit für nur einen relativ kleinen Vorteil erfordern, was die Implementierer des passwd
Befehls nicht wollten . Es gibt keinen Terminalmodus zum Drucken von Sternchen, da dies eine sehr spezielle Funktion ist, die nur bei der Eingabe von Kennwörtern nützlich ist.
Übrigens, wenn Sie Ihr Passwort beim Ändern sehen möchten, können Sie es verwenden cat | passwd
(zumindest auf einigen Systemen - einige Versionen passwd
erfordern eine Option wie cat | passwd --stdin
und einige akzeptieren dies überhaupt nicht). (Sie können dies sogar tun { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, tun es aber nicht: Es werden die Kennwörter im Shell-Verlauf gespeichert, wodurch das Risiko eines Lecks erheblich größer ist.) Dies mit Befehlen arrangieren, die das Kennwort vom Terminal lesen, anstatt wie auch immer Ihre Standardeingabe wie sudo
oder ssh
ist komplexer. Wenn Sie eine GUI zur Verfügung haben, können Sie ssh-askpass verwenden, das anzeigt, wie viele Zeichen Sie eingegeben haben ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
für sudo; für ssh ist es kompliziert, wenn Sie es von einem Terminal aus aufrufen).