数週間前、私はキーボードをクリーンアップすることに決め、ボードにスナップバックしているときにいくつかのキーを台無しにしてしまいました。その結果、一部の文字は入力が煩わしくなりました...そして明らかに私はパスワードにその文字のいくつかを使用しています。
もちろんキーボードを交換する予定ですが、その間、ttyで1日に4〜5回のログイン試行を行う必要があり、神経質になり始めています(デスクトップマネージャーは使用していません)。
pwfeedback
構成でSudo
を設定することで、問題を少し軽減することができました。これにより、キーボードが文字をスキップするたびに「見る」ことができます。ただし、agetty
とlogin
の組み合わせに同様のオプションは見つかりませんでした。
Ttyログインプロンプトのパスワードフィードバックをアクティブにする方法はありますか?
了解しました。ソースコードに移動します。
util-linux
のlogin
プログラムは、ログインプロンプトが表示されるまでに担当しています。 そこから 、より具体的には login-utils/login.c
ファイルから始めましょう。
現在、login
はlogin
プロンプトを担当しているように見えます。これは、 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_unix
はNULL
引数にPrompt
を渡し、item
にPAM_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_OFF
を read_string
に渡します... ここで は、PAMが入力フィードバックを非アクティブにします。
結論:パスワードフィードバックがないことはハードコーディングされています。残念な。少し掘り下げて、 このGitHubの問題 および このArchBBSスレッド にたどり着きました。どうやら、 機能は利用可能でした PAMが認証の標準ではなかったときに戻ってきました。セキュリティとすべてを再度実装しないのは理にかなっていると思いますが、オプションはニースだったでしょう。
とにかく、新しいキーボードを注文しました。