升级到 Debian 7.4 后,任何服务的密码验证都需要很长时间。对于 SSH 登录、sudo 和使用 dovecot(配置为使用 PAM)进行身份验证都是如此。
我可以反向查找 DNS 条目,这似乎不是问题。感觉像是某些身份验证机制正在超时。我尝试启用 pam_debug,但没有看到任何调试输出。
下面是执行 sudo 所需时间的示例(使用密码提示,在 sudo 缓存密码期间,它会立即起作用):
ceicke@h1633420:~$ time sudo who
[sudo] password for ceicke:
ceicke pts/0 2014-08-01 09:19 (80.131.XXX.XXX)
real 0m27.976s
user 0m0.009s
sys 0m0.014s
另外,使用我的私钥通过 SSH 进入盒子也是立即生效的。因此,密码检查过程确实需要很长时间。
我有点不知道我还能尝试什么,特别是因为 PAM 模块对于它正在做的事情保持沉默。
更新 #1
以下是 strace 的输出:http://pastebin.com/dRvqsrcd
有一个很多我猜想这些调用time(null)
会获取当前的 Unix 时间戳。似乎有什么东西正在主动检查超时。
我注意到两件事:
- 该
time(null)
调用通常在开放调用之前进行/dev/urandom
,难道我的服务器正在等待收集足够的熵? - 各个地方都有很多参考。我不使用 Kerberos 进行身份验证,我可以从 pam 配置中
krb5
直接删除吗?pam_krb5.so
我没有太多准备 strace 输出的经验,也许你可以看到更多?
更新 #2
服务器上的熵相当低,在 100 - 200 之间。
答案1
我的第一个建议也是尝试strace -f sudo who
。但这行不通,因为 strace 不会跟踪 SUID 程序。您必须使用strace
as连接到您的 shell根然后调用sudo
。
在你的 shell 类型中
$ echo $$
获取 shell PID。然后打开另一个终端并在该终端中成为 root。在那里输入
# strace -f -t -T -p $pid -o /tmp/sudo.strace
你从另一个终端获得的 PID在哪里$pid
?然后返回第一个终端并启动
$ sudo who
获得输出后,返回根终端,使用 CTRL-C 停止 strace 进程并分析 /tmp/sudo.strace
更新:
抱歉,我忘了提到两个选项strace
。-t
它为每行添加当天时间前缀,并用-T
它显示系统调用所花费的时间。这些有助于找到系统变慢的点。
更新 2:
鉴于您不需要 Kerberos,禁用 pam_krb5 可能是一种选择。您可以在文件中将其注释掉/etc/pam.d/,通常在名为 *common-** 的文件中。Kerberos 需要一些熵,这可能是罪魁祸首。但是,尽管如此,还是可以通过运行来验证这一strace
假设-t
。
你应该更改您的密码,因为它在您上传到 pastebin 的文本文件中是可读的。
答案2
因此,事实证明,Kerberos 与低熵的结合导致了问题。由于我没有使用 Kerberos,因此我运行pam-auth-update
并取消选择了 Kerberos。