登录需要很长时间

Chr*_*cke 6 debian password pam

从任何服务升级到 Debian 7.4 后,密码验证都需要很长时间。这适用于 SSH 登录、sudo'ing 和使用 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
Run Code Online (Sandbox Code Playgroud)

使用我的私钥 SSH 进入盒子也可以立即生效。所以真的密码检查过程需要很长时间。

我对我可以尝试的其他事情有点迷茫,特别是因为 PAM 模块对它正在做的事情非常非常沉默。

更新 #1

这是 strace 的输出:http : //pastebin.com/dRvqsrcd

我猜有很多调用time(null)会获取当前的 Unix 时间戳。似乎有些东西正在积极检查超时。

我注意到两件事:

  1. time(null)通话经常与公开征集到之前/dev/urandom,它可以是我的服务器正在等待收集足够的熵?
  2. krb5在不同的地方有很多参考。我不使用 Kerberos 进行身份验证,我可以简单地pam_krb5.so从我的 pam 配置中取出吗?

我没有很多准备strace输出的经验,也许你可以看到更多?

更新 #2

服务器上的熵相当低,在 100 - 200 之间。

Mat*_*ner 5

我的第一个建议也是尝试strace -f sudo who。但这行不通,因为 strace 不会跟踪 SUID 程序。您可以使用附加到你的shellstrace作为,然后调用sudo

在你的外壳类型中

$ echo $$
Run Code Online (Sandbox Code Playgroud)

获取你的shell PID。然后打开另一个终端并在该终端中成为 root。在那里你输入

# strace -f -t -T -p $pid -o /tmp/sudo.strace
Run Code Online (Sandbox Code Playgroud)

$pid您从另一个终端获得的 PID在哪里。然后回到你的第一个终端并开始

$ sudo who
Run Code Online (Sandbox Code Playgroud)

获得输出后,返回根终端,使用 CTRL-C 停止 strace 进程并分析 /tmp/sudo.strace

更新: 对不起,我忘了提到两个选项strace。用-t它在每一行前面加上一天中的时间,并用-T它显示系统调用所花费的时间。这些有助于找到变慢的点。

更新 2: 鉴于您不需要 Kerberos,禁用 pam_krb5 可能是一个选项。您可以在/etc/pam.d/中的文件中将其注释掉,通常在名为 *common-** 的文件中。Kerberos 需要一些熵,这可能是罪魁祸首。但尽管如此运行验证这一假设strace-t

您应该更改密码,因为它可以在您上传到 pastebin 的文本文件中读取。