sudo
我在Ubuntu 14.04服务器上输入的第一个总是很慢。密码提示会立即显示,但是在我按Enter键之后,大约需要10到15秒钟,直到打印输出。此后所有sudo命令都会立即执行。
sudo strace -S time -c sudo echo hi
在这种情况下,运行类似之类的命令不会显示任何有用的信息,因为sudo from sudo echo hi
已经是第二个sudo并且可以快速执行。如果过了一段时间,并且我必须在运行的会话中重新输入密码,那么它又很慢。
我发现的所有解决方案都是在/etc/hosts
文件中添加主机名作为127.0.0.1的解析,但我没有用。su root
立即执行。我记得最近几天更改的唯一一件事是服务器路由,安装samba,dnsutils和bind9的子网的子网掩码。但是这些进程都没有运行,并且问题仍然存在,包括物理访问,ssh会话以及tmux会话。
编辑:新方法
我尝试sudo tcpdump -vvvi any > tcpdump.log
在所有NIC都断开连接的情况下运行。日志显示以下内容:
18:35:09.453399 IP (tos 0x0, ttl 64, id 49112, offset 0, flags [DF], proto UDP (17), length 76)
localhost.38498 > localhost.domain: [bad udp cksum 0xfe4b -> 0x1050!] 58546+ SRV? _kerberos._udp.KF.OURLOCALDOMAIN.DE. (48)
18:35:09.457412 IP (tos 0x0, ttl 64, id 49113, offset 0, flags [none], proto UDP (17), length 76)
localhost.domain > localhost.38498: [bad udp cksum 0xfe4b -> 0x8fcd!] 58546 ServFail q: SRV? _kerberos._udp.KF.OURLOCALDOMAIN.DE. 0/0/0 (48)
使用udp的tcp instad显示相同的条目。我用OURLOCALDOMAIN替换了我们大学的域名。
现在,我认为kerberos可能与此有关,但是我删除了/etc/krb5.conf并重新启动,仍然没有任何变化。在我看来,该服务器试图在我们大学网络的中央kerberos服务器上进行自我验证。我知道几年前,此IP已注册到为我们部门运行samba的服务器。可以连接吗?我将主机名更改为当时使用的主机名,sudo行为未更改。Lmwangi对PAM提出了一些建议,但我对此知之甚少,所以我不知道该如何处理。我还记得安装samba时从Heimdal Kerberos切换到MIT Kerberos,因为在安装samba时遇到了麻烦。我还将在接下来的几天中尝试使用评论中的想法,但是我将旅行几天,因此可能需要一些时间。
编辑2:解决
中有一个旧的dns搜索条目,将/etc/network/interfaces
所有内容弄乱了。我觉得很傻。现在一切正常。
sudo -k
删除您的缓存的凭据。我发现strace -Tro sudo.log sudo echo hi
这很有用,因为最后一栏显示了每次通话的时间。grep
对于uname
和socket
作为首发。
-r
选项(可能应删除)。通过寻找从长期调用启动-T
选项-他们是内部那些<
和>
-你的情况0.000097秒。
strace
最终将带您到那里,但这可能是更高级别的配置问题。身份验证过程中最长时间的暂停是由于无法访问远程服务器并且必须等待超时所致。子网更改可能会使身份验证服务器与该子网位于不同的子网中。sudo
临时将成功身份验证的记录保存在下面,/var
因此这可能就是为什么随后的调用会立即进行的原因。
strace
将使您可以在没有first的情况下运行它sudo
。使用该-o <file>
选项将输出保存到文件中进行分析也可能会有所帮助。