为什么通过sshlogin失败需要比成功的更长的时间?

这是多年来一直困扰我的东西,我很好奇,如果你的一个超级pipe理员可以解释给我。

如果我SSH入我的一个Linux机箱,并提供正确的凭据,我的身份validation几乎是瞬间的。 在同一个框中,如果我提供了错误的密码,则需要几秒钟才能显示失败的login消息并重新提示。 服务器上发生什么事情需要一个密码错误很长时间才能失败?

感谢sf!

SR

这是由检查密码的PAM模块实施的安全function。

如果您阅读了pam_unix(8)的联机帮助页,则会看到一个“nodelay”选项。 pam_unix被ssh用来检查密码,通过login,以及其他任何检查你的密码。 “默认的操作是模块要求延迟2秒的顺序。”

所有的pam模块都可以调用一个函数来请求主pam的延迟。 pam_fail_delay。 这个函数调用任何模块调用的最长延迟,随机更改最多25%,并在返回应用程序之前等待很长时间(sshd,login等)。

在许多系统上,这是一种常见的安全措施,例如试图检查不存在的用户的密码将会插入一个小的睡眠。 这可以防止定时攻击,因为否则login到有效帐户的失败可能会比尝试login不存在的帐户稍微长一点(encryption密码,主目录中的统计信息等)。 其他术语是隐蔽通道 , 定时通道或旁通道攻击 。 它也不鼓励暴力攻击(但不是很好,只是打开更多的连接)。 随机化睡眠稍有帮助,也。

尽pipe我对OpenSSH的工作并不熟悉,但是这是一个安全function。 毫不迟疑地,(自动)攻击者很容易在很短的时间内尝试多个密码。 任何一种“污泥因素”都会使这种攻击变得不可行。

这取决于您的服务器的身份validationconfiguration。 在大多数Linux机器上(现成的普通香草),这将使用PAM,为本地帐户。 但是,它也可能会寻找一个NIS服务。 当您成功login到本地用户帐户时,这种情况永远不会发生,但如果这样做不起作用,那么PAM将在searchNIS服务器(或NIS服务器上的凭据,如果有的话)中超时。

当然,还有很多其他可能的情况,在类似的原则适用。 为了给你一个详细的答案,你需要tom提供关于服务器的authentication设置的更多细节(例如/etc/nsswitch.conf和/etc/pam.conf或者/etc/pam.d中的文件内容)。

这是不是也与回退机制有关 – 如果你login的详细输出上,当你得到你的凭证的权利,它不需要任何其他forms的authentication后退会发生什么。