入力したパスワードを表示できないのはなぜですか?

入力したパスワードを表示できないのはなぜですか?

以下は、Linuxのbashでユーザーを作成するプロセスです。

$ sudo useradd Alexandra
$ sudo passwd Alexandra
Enter new UNIX password: 
Enter new UNIX password: 
passwd: password updated successfully

セキュリティ上の理由でパスワードを表示してはいけないことはわかりますが、私が言いたいことは次のとおりです。アスタリスク(または私が入力した文字)が表示されないのはなぜですか?

ベストアンサー1

ユーザー入力を隠す最も簡単な方法は何ですか?

表示されません!

パスワードの入力中にパスワードを隠すのは古い伝統です。ほとんどの場合、これはセキュリティの観点からは意味があります。誰かがあなたを探索しているなら、他の人があなたが入力しているものを簡単に見ることができるようにしたくないでしょう。 (次のような最新の安全ガイドラインは、1 2 サム 4 5ただし、パスワードを表示するオプションを持つことをお勧めします。これにより、ユーザーはより複雑なパスワードを選択することができ、見えないスペルエラーを修正するのに時間を無駄にしない可能性があります。最大のリスクは、肩越しに覗くのではなく、暴力的な推測、多分オフラインで行うことです。 )

パスワードを隠すことにした後、実装者はパスワードを隠す方法を決定する必要があります。端末には、ユーザー入力を表示するモード(エコーオン)と、ユーザー入力を表示しないモード(エコーオフ)があります。エコーオフモードはやや本質的です。このモードでは、端末はユーザー入力をエコーする追加の操作を行いません。このモードは、キーを入力しても文字が挿入されず、代わりにキーにバインドされた一部のアプリケーションショートカットが呼び出されるアプリケーションにも存在する必要があります。したがって、passwdパスワードを読み取るときにオフモードなどのコマンドをエコーするように端末を設定するだけです。

各文字ごとにアスタリスクを印刷するには、比較的小さな利点のために追加の実装操作が必要であり、コマンド実装者はpasswdそれを望んでいませんでした。アスタリスクを印刷するための端末モードはありません。これは、パスワードを入力するときにのみ役に立つ非常に特殊な機能であるためです。

ちなみに、パスワードが変更されたときに確認したい場合はそれを行うことができますcat | passwd(少なくとも一部のシステムではpasswdRequire an option like thisの一部のバージョンcat | passwd --stdinがあり、一部はこのオプションをまったく許可しません)。 (これを行うこともできますが、{ echo 'current password'; echo 'new password'; echo 'new password'; } | passwdそうしないでください。パスワードがシェル履歴に保存されるため、漏洩のリスクがはるかに大きくなります。)標準入力ではなく、端末からパスワードを読み取るコマンドを使用してください(sudoまたはssh)。これを達成することはより複雑です。利用可能なGUIがある場合、ssh-askpassを使用して入力した文字数を確認できます(SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -Asudoの場合、sshの場合は端末から呼び出すと複雑です)。

おすすめ記事