sudo
我在 Ubuntu 14.04 服务器上输入的第一个总是很慢。密码提示会立即显示,但在我按 Enter 后,大约需要 10-15 秒才能打印输出。此后的所有 sudo 命令都会立即执行。
在这种情况下,运行类似的命令sudo strace -S time -c sudo echo hi
不会显示任何有用的信息,因为 sudo fromsudo echo hi
已经是第二个 sudo 并且执行速度很快。如果一段时间过去了,我必须在正在运行的会话中重新输入密码,速度又会变慢。
我找到的所有解决方案都是关于在文件中添加主机名作为 127.0.0.1 的解析/etc/hosts
,但我这样做没有效果。su root
立即执行。我记得最近几天唯一改变的是服务器路由的子网的网络掩码,安装了 samba、dnsutils 和 bind9。但这些进程都没有运行,问题仍然存在,在物理访问、ssh 会话以及 tmux 会话中。
编辑:新方法
我尝试sudo tcpdump -vvvi any > tcpdump.log
在断开所有网卡的情况下运行。日志显示了以下很多内容:
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)
相同的条目显示为 tcp 而不是 udp。我将我们大学的域名替换为 OURLOCALDOMAIN。
现在我认为kerberos可能与此有关,但我删除了/etc/krb5.conf并重新启动,仍然没有任何变化。在我看来,服务器试图在我们大学网络的中央 kerberos 服务器上验证自身。我知道几年前,这个 IP 已注册到为我们部门运行 samba 的服务器上。能有联系吗?我将主机名更改为当时使用的主机名,sudo 行为没有变化。 Lmwangi 建议了一些关于 PAM 的内容,我对此知之甚少,所以我不知道如何解决这个问题。我还记得在安装 samba 时我从 Heimdal Kerberos 切换到 MIT Kerberos,因为我在 samba 安装过程中遇到了麻烦。我也将在接下来的几天尝试评论中的想法,但我将旅行几天,所以可能需要一些时间。
编辑2:已解决
中有一个遗留的 dns-search 条目把/etc/network/interfaces
一切搞乱了。我觉得自己很愚蠢。现在一切正常了。
答案1
我怀疑您的机器正在尝试使用 PAM 联系外部身份验证服务(例如 NIS/LDAP)...
如果我对 PAM 的理解正确,您将无法在 strace 调用中看到 PAM 查找。我建议您运行 tshark/tcpdump 并查看是否可以将特定网络流量与您的 sudo 尝试相关联。这里的嫌疑人是 DNS 查找 &| LDAP 调用。
tcpdump -i eth0 -w network.pcap -s0 -Av
如果您确实找到了导致查找的原因,请找到相关的 PAM 模块来编辑并修复问题。或者,如果是 DNS 查找,只需添加 /etc/hosts 条目来伪造名称并重定向到本地主机。这将使你的 sudo 变得更快,因为查找会很快并且会重定向到本地主机,并且网络事务会很快失败,因为本地主机上没有任何监听......