個人的な興味から MFA を試しているのですが、解決できない問題に遭遇しました。最近、PAM (Google Authenticator を使用) をセットアップしましたが、これをもう 1 種類の認証と組み合わせたいと思っています。
私には複数のアカウントがあり、sshd_config は次のようになっています。
PasswordAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
UsePAM yes
Match User user2
PasswordAuthentication yes
AuthenticationMethods password,keyboard-interactive
「user2」以外のすべてのユーザーに対して、キーと検証コードを使用して正しく認証できます。ただし、「user2」に接続しようとすると問題が発生します。クライアントから接続しようとすると、パスワードと検証コードのプロンプトが正しく表示されます。ただし、予想されるパスワードは「user2」アカウントのパスワード (「hunter2」とします) ではなく、アプリに表示される検証コードです。
$ ssh user2@machine -p port
user2@machine's password:
パスワードプロンプトに「hunter2」と入力すると拒否されます。ただし、アプリに表示される検証コードを入力すると、次のプロンプトが表示されます。
$ ssh user2@machine -p port
user2@machine's password:
Verification Code:
もちろん、認証コードはもう一度必要です。これでログイン完了です。
私は user2-block でいくつかの異なる組み合わせを試しました:
Match User user2
PasswordAuthentication yes
AuthenticationMethods password
上記では、上記のようにパスワードプロンプトで検証コードが必要であり、検証コードプロンプトの前に正常にログインできます。
私の /etc/pam.d/sshd ファイルは、以下の追加を除いてまったく変更されていません。
auth required pam_google_authenticatior.so
そしてコメントアウト
@include common-auth
->
#@include common-auth
auth required pam_google_authenticatior.so
答え1
これは OpenSSH の正常な結果です。password
とkeyboard-interactive
auth メソッドは両方とも設計上 PAM を使用し、どちらもまったく同じ PAM スタックを呼び出します。(結局のところ、「UsePAM yes」は、パスワード検証に PAM を使用するように指示したことを意味するため、忠実に PAM を呼び出して、パスワードと思われるものを検証します。)したがって、両方とも同じ入力を受け入れます。
これら2つのメカニズムの唯一の違いは、「キーボードインタラクティブ」のみがPAMに複数のプロンプトを連続して表示したり、表示されるプロンプトテキストを変更したりすることを実際に許可していることです。一方、「パスワード」は固定形式のメカニズムです。いいえSSH クライアントに送信される実際の「プロンプト」。パスワードを 1 つだけ要求します。
言い換えれば、2 つのメカニズムを組み合わせるのは役に立ちません。OpenSSH でパスワードとトークンを別々に検証することはできず、すべてまたは何も実行できません。(OpenSSH 内で 2 つの異なる PAM スタックを指定する機能は何度か提案されていますが、これまでのところそのようなパッチは受け入れられていません。)