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


13

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

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

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

だから、通常のパスワードでログインを防ぎたいが、それでもPAMの使用を許可したいなら、新しいdebian jessie sshデーモンを設定する方法。

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

PAM認証の詳細

PAMベースのパスワード認証を無効にすることはかなり直感的ではありません。ほとんどすべてのGNU / Linuxディストリビューション(Slackwareの顕著な例外を除く)とFreeBSDで必要です。注意しない場合は、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

回答:


23

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

正しい。あなたはすでに設定UsePAM noが一般に悪いアドバイスであるという事実につまずきました。PAMベースの認証のあらゆる形式を防ぐだけでなくaccountsessionモジュールを無効にします。アクセス制御とセッション構成は良いことです。

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

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

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


sshd config

以下は、私が提案する行です/etc/ssh/sshd_configsshd何かを壊すことなく、このシステムにアクセスする方法があることを確認してください!

# 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からのコメント/etc/pam.d/sshd
  • /etc/pam.d/sshd始まる行authが存在しないことを確認します。これがクリーンインストールである場合はありませんが、安全であることが最善です。
  • authエントリを追加しpam_google_authenticator.soます。

ローカルパスワードは引き続き機能します。

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


havnはまだテストしていませんが、論理的に見え、5つの賛成票で受け入れられると思います。
c33s

私は自分自身をテストしました。パスワードを完全に無効にする場合は、ChallengeResponseAuthentication noも設定する必要があります。blog.tankywoo.com/linux/2013/09/14/…を
匿名

@anonymous OPの質問と最初の箇条書きを参照してください。無効にChallengeResponseAuthenticationすると、OTPを処理するPAM認証モジュールに必要なキーボードインタラクティブ認証方法が壊れます。(OPが望ましい)CRAを無効にすることは、スタック内に起動する必要のある PAMモジュールが本当にない場合にのみ安全に実行できますauth。場合PasswordAuthenticationGSSAPIAuthenticationPAMが要求する認証モジュールを有効にしていない限り、無効にされ、パスワードは受け入れられません。
アンドリューB

(それはまだ素晴らしいリンクです)
アンドリューB

0

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

この行をコメントする

#auth       substack     password-auth

/etc/pam.d/sshdに

OTPを使用せずにsshで認証しても問題ない限り、この行の最後にnullokがないようにしてください。

auth required pam_google_authenticator.so
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.