多くのチュートリアルでは、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
おそらく正確な質問は、パスワードを許可しないようにpamを設定する方法ですか?
正しい。 UsePAM no
の設定は一般的に悪いアドバイスであるという事実にすでに遭遇しました。 PAMベースの認証を防ぐだけでなく、account
およびsession
モジュールも無効にします。アクセス制御とセッション構成は良いことです。
まず、要件のリストを作成しましょう。
pam_google_authenticator.so
経由のOTP。これにはUsePAM yes
とChallengeResponseAuthentication yes
が必要です。結局のところ、資格証明を求めているのです!keyboard-interactive
ログインを介してパスワードを送信できる可能性があるauth
モジュールを無効にします。 (OTPを有効にしておく必要があります)publickey
認証が必要です。Kerberosが構成されている場合は、おそらくgssapi-with-mic
が必要です。通常、キーによる認証はPAMベースの認証を完全にスキップします。これにより、opensshの古いバージョンを使用することができなくなりましたが、Debian 8(jessie)はAuthenticationMethods
ディレクティブをサポートしています。これにより、複数の認証方法を要求できますが、SSHv2を実装するクライアントでのみ機能します。
以下は、/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を構成する必要があります。 Debian 8のクリーンインストールを前提としています(質問ごと)。
@include common-auth
from /etc/pam.d/sshd
。/etc/pam.d/sshd
を確認し、auth
で始まる行がないことを確認します。これがクリーンインストールである必要はありませんが、安全であることが最善です。pam_google_authenticator.so
のauth
エントリを追加します。ローカルコンソールを介したログインに影響を与えるような変更を加えたり、ユーザーがパスワードを使用してSudo.
を介して権限をアップグレードしたりすることを妨げませんでした。これは質問の範囲外でした。さらに物事を進めることにした場合は、rootは常にパスワードを使用してローカルでログインすることを許可されている必要があることに注意してください。そうしないと、誤ってシステムからロックアウトされる危険があります。
パスワード要求を拒否する
#auth substack password-auth
/etc/pam.d/sshd
oTPを使用せずにssh経由で認証しても問題がない場合を除き、この行の最後にnullokがないことを確認してください
auth required pam_google_authenticator.so