web-dev-qa-db-ja.com

PAMでsshサーバーを使用するが、パスワード認証を許可しない方法は?

多くのチュートリアルでは、sshサーバーを次のように構成するように指示しています。

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

ただし、この設定ではPAMを使用できません。GoogleAuthenticator(OTPワンタイムパスワード)で2要素認証を使用する予定なので、PAMが必要です。

通常のパスワードでのログインを禁止し、PAMの使用を許可する場合は、新しいdebian jessie sshデーモンを構成する方法について説明します。

おそらく正確な質問は、パスワードを許可しないようにpamを設定する方法ですか?

PAM認証の詳細

PAMベースのパスワード認証を無効にすることは、直感的ではありません。 FreeBSDとともに、ほとんどすべてのGNU/Linuxディストリビューション(Slackwareを除く)で必要です。注意しない場合は、PasswordAuthenticationを「no」に設定しても、PAM認証を介してパスワードのみでログインできます。 PAM認証を本当に無効にするには、「ChallengeResponseAuthentication」を「no」に設定する必要があることがわかります。 FreeBSDのmanページには、これについての記述があります。これは、状況を少し明確にするのに役立つ場合があります。

ChallengeResponseAuthenticationが「yes」で、sshdのPAM認証ポリシーにpam_unix(8)が含まれている場合、PasswordAuthenticationの値に関係なく、チャレンジ/レスポンスメカニズムによるパスワード認証が許可されることに注意してください。

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

13
c33s

おそらく正確な質問は、パスワードを許可しないようにpamを設定する方法ですか?

正しい。 UsePAM noの設定は一般的に悪いアドバイスであるという事実にすでに遭遇しました。 PAMベースの認証を防ぐだけでなく、accountおよびsessionモジュールも無効にします。アクセス制御とセッション構成は良いことです。

まず、要件のリストを作成しましょう。

  • pam_google_authenticator.so経由のOTP。これにはUsePAM yesChallengeResponseAuthentication yesが必要です。結局のところ、資格証明を求めているのです!
  • PAMによる他の形式のパスワード認証はありません。つまり、keyboard-interactiveログインを介してパスワードを送信できる可能性があるauthモジュールを無効にします。 (OTPを有効にしておく必要があります)
  • 鍵ベースの認証。 publickey認証が必要です。Kerberosが構成されている場合は、おそらくgssapi-with-micが必要です。

通常、キーによる認証はPAMベースの認証を完全にスキップします。これにより、opensshの古いバージョンを使用することができなくなりましたが、Debian 8(jessie)はAuthenticationMethodsディレクティブをサポートしています。これにより、複数の認証方法を要求できますが、SSHv2を実装するクライアントでのみ機能します。


sshd設定

以下は、/etc/ssh/sshd_configについて提案する行です。何かを壊した場合に備えて、sshdなしでこのシステムにアクセスする方法があることを確認してください!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

これらの変更が完了したら、sshdをリロードすることを忘れないでください。

PAM設定

PAMを構成する必要があります。 Debian 8のクリーンインストールを前提としています(質問ごと)。

  • コメント@include common-auth from /etc/pam.d/sshd
  • /etc/pam.d/sshdを確認し、authで始まる行がないことを確認します。これがクリーンインストールである必要はありませんが、安全であることが最善です。
  • pam_google_authenticator.soauthエントリを追加します。

ローカルパスワードは引き続き機能することに注意してください。

ローカルコンソールを介したログインに影響を与えるような変更を加えたり、ユーザーがパスワードを使用してSudo.を介して権限をアップグレードしたりすることを妨げませんでした。これは質問の範囲外でした。さらに物事を進めることにした場合は、rootは常にパスワードを使用してローカルでログインすることを許可されている必要があることに注意してください。そうしないと、誤ってシステムからロックアウトされる危険があります。

23
Andrew B

パスワード要求を拒否する

この行にコメント

#auth       substack     password-auth

/etc/pam.d/sshd

oTPを使用せずにssh経由で認証しても問題がない場合を除き、この行の最後にnullokがないことを確認してください

auth required pam_google_authenticator.so
1
JOduMonT