从任何服务升级到Debian 7.4密码authentication后需要很长时间。 对于SSHlogin,通过dovecot进行sudo'ing和身份validation(configuration为使用PAM),这是正确的。
我能够反向查询DNS条目,这似乎不是问题。 这感觉就像一些authentication机制运行到超时。 我试图启用pam_debug,但是我没有看到任何debugging输出。
下面是一个例子,需要多长时间才能完成一个sudo(在sudocaching密码的时候提供密码提示,它会立即生效):
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模块非常默默无闻。
这里是strace的输出: http : //pastebin.com/dRvqsrcd
有很多 time(null)的调用time(null) ,我猜得到当前的Unix时间戳。 似乎有些事情正在主动检查超时。
我注意到两件事情:
time(null)调用往往是打开/dev/urandom ,可以是我的服务器正在等待收集足够的熵? krb5的引用。 我不使用Kerberos进行身份validation,我可以简单地从我的pam configs中取出pam_krb5.so吗? 我没有很多准备strace输出的经验,也许你可以看到更多?
服务器上的熵值相当低,在100-200之间。
我的第一个build议也将尝试strace -f sudo who 。 但是这不起作用,因为strace不会跟踪SUID程序。 你必须使用strace作为根连接到你的shell,然后调用sudo 。
在你的shelltypes中
$ echo $$
得到你的炮弹PID。 然后打开另一个terminal,并成为该terminal的根。 在那里你打字
# strace -f -t -T -p $pid -o /tmp/sudo.strace
$pid是从另一个terminal获得的PID。 然后返回到您的第一个terminal,并开始
$ sudo who
获得输出后,回到根terminal,用CTRL-C停止strace进程并分析/tmp/sudo.strace
更新:对不起,我忘了提及两个选项strace 。 用-t表示每一行的时间和-T表示在系统调用中花费的时间。 这些有助于find缓慢的地步。
更新2:鉴于您不需要Kerberos,禁用pam_krb5可能是一个选项。 您可以在/etc/pam.d/中的文件中注释它,通常在名为* common – **的文件中。 Kerberos需要一些熵,这可能是罪魁祸首。 但是,通过用-t运行stracevalidation这个假设。
而且你应该改变你的密码 ,因为它在你上传到pastebin的文本文件中是可读的。
所以,事实certificate,Kerberos与低熵结合是造成这个问题的原因。 由于我没有使用Kerberos,我运行了pam-auth-update和未选中的Kerberos。