web-dev-qa-db-ja.com

ttyでパスワードフィードバックを有効にできますか?

数週間前、私はキーボードをクリーンアップすることに決め、ボードにスナップバックしているときにいくつかのキーを台無しにしてしまいました。その結果、一部の文字は入力が煩わしくなりました...そして明らかに私はパスワードにその文字のいくつかを使用しています。

もちろんキーボードを交換する予定ですが、その間、ttyで1日に4〜5回のログイン試行を行う必要があり、神経質になり始めています(デスクトップマネージャーは使用していません)。

pwfeedback構成でSudoを設定することで、問題を少し軽減することができました。これにより、キーボードが文字をスキップするたびに「見る」ことができます。ただし、agettyloginの組み合わせに同様のオプションは見つかりませんでした。

Ttyログインプロンプトのパスワードフィードバックをアクティブにする方法はありますか?

3
John WH Smith

了解しました。ソースコードに移動します。

util-linuxloginプログラムは、ログインプロンプトが表示されるまでに担当しています。 そこから 、より具体的には login-utils/login.c ファイルから始めましょう。

現在、loginloginプロンプトを担当しているように見えます。これは、 loginpam_get_Prompt で生成し、 init_loginpam でPAMに登録するためです。 loginpam_auth 関数が引き継ぎ、制御はPAMの pam_authenticate 関数に移ります。これは、loginがユーザー名のプロンプトを定義するだけであり、それだけであることを意味します。

次にPAMに:私たちが興味を持っていることは明らかに pam_authenticate で起こります:

Pam_authenticate関数は、ユーザーを認証するために使用されます。ユーザーは、認証サービスに応じて認証トークンを提供する必要があります。通常、これはパスワードですが、指紋の場合もあります。

現在、シャドウベースの認証(/etc/passwd/etc/shadow)はpam_unixモジュールによって処理されます。私のディストリビューション(Arch)は、 pam パッケージを介してPAMを提供します。つまり、私たちの旅は linux-pam.org および そのソースコード に続きます。 modules/pam_unix/pam_unix_auth.c 開始するのに適した場所のようです。 PAMモジュールは、pam_sm_authenticate関数を介して認証メカニズムを提供します。これは、 ここ にあります。パスワード(または「認証トークン」、上記を参照)は、 呼び出し PAMの pam_get_authtok 関数でフェッチされます。 security/pam_ext.h ヘッダーファイルで宣言されているので、次に進みます。

extern int PAM_NONNULL((1,3)) 
pam_get_authtok (pam_handle_t *pamh, 
                 int item, 
                 const char **authtok, 
                 const char *Prompt);

それらの議論であまり有望なことは何もありませんが、まあ... 定義 を見てみましょう。 pam_unixNULL引数にPromptを渡し、itemPAM_AUTHTOKを渡したので ここで になります。 PAM_Prompt_ECHO_OFFにハードコードされたpam_Promptが与えられたので、私にはよく見えません...

retval = pam_Prompt (pamh, PAM_Prompt_ECHO_OFF, &resp[0], "%s", Prompt);

ちなみに、パスワードPromptもハードコードされているので( ここ )、もっとエキゾチックなパスワードプロンプトの夢があります...とにかく、 pam_Prompt 関数に行きましょう。実際のプロンプトは ここで 発生します。ここで、PAMは会話関数を呼び出し、 上記の数行をフェッチしますpam_get_itemおよびpam_set_item 関数をざっと見てみると、 pam_conv 構造が定義されています ここで

さて、デフォルトのPAM会話関数に関する情報を見つけることは、本来あるべきよりもはるかに難しいことでした(私は思います)。どこを見ても、構造は初期化されておらず、pam_unixはそれ自体を定義しているようには見えません。しかし、私はなんとか一般的な misc_conv 関数を見つけることができました。これは、PAM_Prompt_ECHO_OFFread_string に渡します... ここで は、PAMが入力フィードバックを非アクティブにします。

結論:パスワードフィードバックがないことはハードコーディングされています。残念な。少し掘り下げて、 このGitHubの問題 および このArchBBSスレッド にたどり着きました。どうやら、 機能は利用可能でした PAMが認証の標準ではなかったときに戻ってきました。セキュリティとすべてを再度実装しないのは理にかなっていると思いますが、オプションはニースだったでしょう。

とにかく、新しいキーボードを注文しました。

2
John WH Smith