限制某些 SSH 用户仅进行公钥认证的最佳方法(禁用密码认证)

限制某些 SSH 用户仅进行公钥认证的最佳方法(禁用密码认证)

我在 Yosemite 上运行 Mac OS X Server.app,并且已为使用默认设置/etc/sshd_config(默认启用公钥和密码验证)的用户启用了 SSH。 但是,我需要限制git本地用户仅通过 SSH 进行公钥访问。

全面披露,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

这不起作用——我仍然能够使用用户名/密码登录[电子邮件保护]:(

但是,添加KbdInteractiveAuthentication no似乎可以正常工作:

Match User git
      PasswordAuthentication no
      KbdInteractiveAuthentication no

现在,当我Permission denied (publickey,gssapi-keyex,gssapi-with-mic)尝试不使用公钥登录时,会出现错误。这似乎表明除了公钥之外,还有其他方法允许用户登录git(即gssapi-keyexgssapi-with-mic

似乎更好的方法是简单地将身份验证方法限制为publickey

Match User git
    AuthenticationMethods publickey

这给出的响应是“权限被拒绝(公钥)”。

问题:

  1. ChallengeResponseAuthentication和 有什么区别KbdInteractiveAuthentication?为什么 KbdInteractiveAuthentication在 match 语句中允许使用 而不允许使用 ChallengeResponseAuthentication
  2. 这种AuthenticationMethods publickey方法是否存在任何缺点/安全问题?
  3. (如果您能帮助我理解gssapi-keyex/gssapi-with-mic以及它们与已启用的 GSSAPI/Kerberos 选项的关系,我将获得额外奖励)

答案1

ChallengeResponseAuthentication很好地总结了和KbdInteractiveAuthentication之间 的区别http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-challengeresponseauthentication.html- 总结来说,ChallengeResponse 通常最终只是要求输入密码(但坚持以交互方式提供密码)。

KbdInteractiveAuthenticationChallengeResponseAuthentication是不同的东西。只是在简单情况下,它ChallengeResponseAuthentication最终可能只是提示输入密码。

ChallengeResponseAuthentication是一个全局设置,不能在Match子句中指定 -sshd_config有关详细信息,请参阅手册页。

AuthenticationMethods publickey明确为用户指定git应该可以正常工作,并且比禁用您不想要的那些更好(因为列表可能会改变)。

如果您在某个环境(例如 Active Directory 域)中工作,这些gssapi选项就会发挥作用。Kerberos

答案2

我并不完全清楚是否存在任何区别,但至少,ChallengeResponseAuthentication 似乎需要 KbdInteractiveAuthentication;如果启用了 Challenge-Response,它会自动打开。

我从阅读中得到的感觉是他们在 SSH1 时代提出了挑战-响应。它在 SSH2 中被标准化为键盘交互,但他们没有立即更改服务器配置文件,以使旧配置能够继续工作。

我在 openssh-portable 源代码中发现了以下内容(截至 20181214)。

sshd.c 从第 1685 行开始:

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

sshconnect2.c 从第 375 行开始:

 if (options.challenge_response_authentication)
    options.kbd_interactive_authentication = 1;

相关内容