更新 #1

更新 #1

升级到 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 时间戳。似乎有什么东西正在主动检查超时。

我注意到两件事:

  1. time(null)调用通常在开放调用之前进行/dev/urandom,难道我的服务器正在等待收集足够的熵?
  2. 各个地方都有很多参考。我不使用 Kerberos 进行身份验证,我可以从 pam 配置中krb5直接删除吗?pam_krb5.so

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

更新 #2

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

答案1

我的第一个建议也是尝试strace -f sudo who。但这行不通,因为 strace 不会跟踪 SUID 程序。您必须使用straceas连接到您的 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。

相关内容