web-dev-qa-db-ja.com

一部のSSHユーザーを公開鍵認証のみに制限する最良の方法(パスワード認証を無効にする)

YosemiteでMacOS X Server.appを実行しており、_/etc/sshd_config_のデフォルト設定(デフォルトで公開鍵とパスワードの認証が有効)でユーザーに対してSSHが有効になっています。 ただし、SSH経由でのみ公開鍵にアクセスできるようにgitローカルユーザーを制限する必要があります。

完全に開示すると、Server.appはいくつかの追加のKerberosおよびGSSAPIオプションを有効にします(ただし、これらが以下の質問にどのように影響するかは100%わかりません)。

_# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
GSSAPIStrictAcceptorCheck yes
GSSAPIKeyExchange no
_

_/etc/sshd_config_は次のように述べています。

_# To disable tunneled clear text passwords both PasswordAuthentication and
# ChallengeResponseAuthentication must be set to "no".
_

ただし、ChallengeResponseAuthenticationはmatchステートメントでは許可されていないため、パスワード認証のみを無効にしてみました。

_Match User git
      PasswordAuthentication no
_

これは機能しません-私はまだユーザー名/パスワードで[email protected]にログインすることができました:(

ただし、_KbdInteractiveAuthentication no_の追加は正しく機能しているようです。

_Match User git
      PasswordAuthentication no
      KbdInteractiveAuthentication no
_

公開鍵なしでログインしようとすると、Permission denied (publickey,gssapi-keyex,gssapi-with-mic)が表示されます。これは、gitユーザーからのログインを許可する公開鍵以外のメソッドがまだあることを示しているようです(つまり、_gssapi-keyex_および_gssapi-with-mic_)

より良いアプローチは、認証方法を単にpublickeyに制限することのようです。

_Match User git
    AuthenticationMethods publickey
_

これにより、「アクセスが拒否されました(公開鍵)」という応答が返されます。

質問:

  1. ChallengeResponseAuthenticationKbdInteractiveAuthenticationの違いは何ですか?マッチステートメントでKbdInteractiveAuthenticationが許可されているのに、ChallengeResponseAuthenticationが許可されていないのはなぜですか?
  2. _AuthenticationMethods publickey_アプローチにマイナス面/セキュリティ上の懸念はありますか?
  3. (_gssapi-keyex_/_gssapi-with-mic_と、それらが有効にされたGSSAPI/Kerberosオプションとどのように関連しているかを理解するのに役立つ場合はボーナス)
7
cdwilson

http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-)にChallengeResponseAuthenticationKbdInteractiveAuthenticationの違いの素晴らしい要約があります。 Challengeresponseauthentication.html -要約すると、ChallengeResponseはパスワードを要求するだけで終わることがよくあります(ただし、パスワードはインタラクティブに提供されると主張しています)。

KbdInteractiveAuthenticationChallengeResponseAuthenticationは別物です。単純なケースでは、ChallengeResponseAuthenticationがパスワードの入力を求めてしまう可能性があるだけです。

ChallengeResponseAuthenticationはグローバル設定であり、Match句内で指定することはできません。詳細については、sshd_configのマニュアルページを参照してください。

gitユーザーにAuthenticationMethods publickeyを明示的に指定すると、正常に機能するはずであり、不要なユーザーを無効にするよりも優れています(リストが変更される可能性があるため)。

gssapi環境(Active Directoryドメインなど)で作業している場合は、Kerberosオプションが役立ちます。

5
Paul Haldane

違いがあるかどうかは私には完全にはわかりませんが、少なくとも、ChallengeResponseAuthenticationにはKbdInteractiveAuthenticationが必要なようです。チャレンジレスポンスが有効になっている場合は、自動的にオンになります。

SSH1時代にチャレンジ/レスポンスを思いついたような気がします。 SSH2とのキーボード対話型として標準化されましたが、古い構成が引き続き機能するように、サーバー構成ファイルをすぐに変更しませんでした。

私はopenssh-portableソースで以下を見つけました(20181214現在)。

1685行目から始まるsshd.c:

 /* challenge-response is implemented via keyboard interactive */
 if (options.challenge_response_authentication)
    options.kbd_interactive_authentication = 1;

375行目から始まるsshconnect2.c:

 if (options.challenge_response_authentication)
    options.kbd_interactive_authentication = 1;
0
Dan Pritts