有人可以解释 /etc/ssh/sshd_config 文件中的“PasswordAuthentication”吗?

Zet*_*ta2 44 linux security openssh ubuntu

此页面上,给出的解释是:

选项 PasswordAuthentication 指定我们是否应该使用基于密码的身份验证。为了增强安全性,此选项必须始终设置为 yes。

但它没有提供任何用例场景来阐明什么时候是或否是合适的。有人可以进一步详细说明吗?

小智 69

请注意,PasswordAuthentication 设置不控制所有基于密码的身份验证。ChallengeResponseAuthentication 通常也要求输入密码。

PasswordAuthentication 控制对 RFC-4252(第 8 节)中定义的“密码”身份验证方案的支持。ChallengeResponseAuthentication 控制对 RFC-4256 中定义的“键盘交互”身份验证方案的支持。理论上,“键盘交互”身份验证方案可以向用户提出任意数量的多方面问题。在实践中,它通常只要求用户输入密码。

如果要完全禁用基于密码的身份验证,请将 BOTH PasswordAuthentication 和 ChallengeResponseAuthentication 设置为“no”。如果您是腰带和吊带的心态,也可以考虑将 UsePAM 设置为“否”。

当然,基于公钥/私钥的身份验证(由 PubkeyAuthentication 设置启用)是一种单独的身份验证类型,不涉及将用户密码发送到服务器。

有些人会争辩说,使用 ChallengeResponseAuthentication 比 PasswordAuthentication 更安全,因为它更难以自动化。因此,他们建议在启用 ChallengeResponseAuthentication 的同时禁用 PasswordAuthentication。此配置还鼓励(但不一定阻止)对任何自动系统登录使用公钥身份验证。但是,由于 SSH 是基于网络的协议,服务器无法保证对 ChallengeResponseAuthentication(又名“键盘交互”)的响应实际上是由坐在键盘前的用户提供的,只要挑战总是并且只包括向用户询问她的密码。

  • 我希望能解释一下`UsePAM` 的作用...... (10认同)

小智 29

您的链接指向已过期 10 年的文档。

SSH 支持多种方式来验证用户,最常见的一种是要求登录名和密码,但您也可以验证用户登录名和公钥。如果您将 PasswordAuthentication 设置为 no,您将无法再使用登录名和密码进行身份验证,而必须使用登录名和公钥(如果PubkeyAuthentication设置为 yes)

  • @RiccardoSCE 根据 sshd_config 手册页,PasswordAuthentication 的默认值为“是”。 (3认同)

小智 5

PasswordAuthentication 是最简单的实现,因为无需执行任何操作。对应的部分是您通过加密连接将密码发送到服务器。如果服务器受到威胁,这可能会成为一个安全问题,因为密码可能会被捕获。
使用公钥,您的密码不会传输到服务器,它更安全,但需要更多设置。

  • 这个答案有点旧,但我想添加一些内容:公钥身份验证的伟大之处在于根本不会将任何秘密传输到服务器。私钥在您的计算机上保持秘密,即您不会意外地将任何类型的秘密传输到受感染或 MITM 服务器。所以 Pubkey 绝对比密码验证更有利。但无论如何,密码验证更容易实现。 (3认同)