登录 GNU/Linux 发行版花费的时间太长

Mar*_*ici 4 linux password login tty

所以,

当我尝试使用我的用户名和密码(在 tty 中)登录并输入错误的密码时,我需要等待大约5 秒钟让系统告诉我密码错误。

为什么验证过程需要那么长时间?

GNU/Linux disto:Archlinux。

小智 5

从历史角度来看,在错误密码后休眠的想法不仅仅存在于基于 PAM 的系统中。它很旧了。对于4.4BSD 登录源中的eaxmple,您会发现这个美味的片段:

/* we allow 10 tries, but after 3 we start backing off */
if (++cnt > 3) {
        if (cnt >= 10) {
                badlogin(username);
                sleepexit(1);
        }
        sleep((u_int)((cnt - 3) * 5));
}
Run Code Online (Sandbox Code Playgroud)

所以前 3 次失败是免费的,接下来的 7 次有增加的延迟(5 秒、10 秒、15 秒......),10 秒后它会执行 a sleepexit(1),即 5 秒延迟,然后是exit(1).

当您在控制台上输入密码时,睡眠只是一种烦恼,但当输入来自可能正在自动化该过程的远程用户时,它们很重要。

sleepexit10次后的失败值得特别说明。后login出口,getty只印刷另一登录提示,并重新开始循环。那么为什么要睡觉并退出而不是仅仅睡觉呢?因为在引入此功能时,通过拨号登录是很常见的。(对于 1995 年之前从未使用过调制解调器的人,请注意:我说的是通过拨号登录,而不是通过拨号登录,而不是 PPP 或其他基于数据包的协议。您可以在终端模拟器中拨打一个号码并获得登录提示。)

在拨号世界中,任何人都可以拨打您的号码并开始向其发送密码,因此该login过程在几次错误密码后退出,导致调制解调器连接终止,迫使他们在尝试更多密码之前重拨。同样的原则适用于ssh今天(配置选项MaxAuthTries),但在过去更有效,因为拨号调制解调器比 TCP 握手要慢得多。