为什么sudo命令需要很长时间才能执行?

在过去的几个月里,我一直在使用Linux(Fedora 10,然后是11),并且非常享受它,就像重新发现计算机,学习这么多东西。

我已经将我的用户添加到/ etc / sudoers文件的最后一行,如下所示,以便在执行sudo命令时不会询问我的密码:

MyUserName ALL =(ALL)NOPASSWD:ALL

现在,每次我使用sudo执行一个命令,在实际执行任务(~10秒)之前,它会暂停一个不可估量的时间。 为什么会这样,我该如何解决这个问题? 我在Fedora 11 x86 64上运行Sudo 1.7.1版本。

我在这个问题上提出了这个问题,它被移动到这里。 也就是说,我不再有能力编辑这个问题,就好像我拥有它,甚至接受正确的答案,但结果却成了解决问题的真正原因:

在这里find用户“rohandhruva”在那里给出正确的答案:

如果您在安装过程中更改主机名,则会发生这种情况。

要解决这个问题,编辑文件/ etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <ADD_YOURS_HERE> ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 <ADD_YOURS_HERE> 

检查你的系统日志守护进程是否工作正常; 这给我造成了这个问题。

运行以下命令

 logger 'Hello world' 
  1. 命令是否在合理的时间内返回?

  2. /var/log/syslog显示'Hello world'吗?

如果情况并非如此,syslog守护进程已经崩溃。 重新启动它应该可以解决你的问题。

是需要在networking上读取的文件/目录之一,还是以某种方式触发缓慢的USB设备读取? 尝试strace,看看它的速度缓慢; 如果过得太快的话

 sudo strace -r -o trace.log sudo echo hi 

每行将以进入前一个系统调用以来的时间开始。

(最初的sudo似乎是必要的,我不知道会有多大的干扰结果。)

我最近发现我有同样的问题。 没有sudo延迟,然后突然间,大约10-20秒的延迟。 我确定了具体的问题,使用:

  1. chmod u+s /usr/sbin/strace (as the root user) 

作为你自己:

  1. sudo -K 2. strace sudo /bin/tcsh 

然后find系统调用挂在哪里。

在我的情况下,我发现它挂在一个DNS翻译,显然是在我的/etc/resolv.conf列表中的一个DNSen是非常buzy或坏了。 所以我改变了决议顺序,噗的东西迅速工作。

我不确定Fedora,但是我使用了其他系统,sudo会检查你login的地方,如果你的DNS设置不好,可能会花费很长时间。 这也可以看出,当SSH到机器 – 它需要时间来提出一个提示。

在很多情况下,发现/etc/sysconfig / network文件中configuration的主机名不存在于/etc/hosts文件中; 所以在join上述文件后,文件即时打开。

我有一个类似的问题,我通过放置主机名(例如mybox)和主机名命令(mybox.mydomain.com)的完整输出来解决它。 这清除了它的权利。 从2分钟打开/ etc / hosts来瞬时访问。

从我看的示例sudoers文件来看,我相信在NOPASSWD:位之后应该有一个空格。

检查你的/ etc / hosts文件,并确保你有一个127.0.0.1的条目

( 来源 )

修复任何主机问题后,请确保您清除了任何错误的DNScaching,如果您正在运行DNScaching应用程序,如nscd:

 /etc/init.d/nscd force-reload 

对我来说,是安装了krb5-user / config / locales。 我通过检查/var/log/auth.log来注意到这一点。 使用apt-get remove来卸载那些修复它的软件包。 如果你在一台需要kerberos(pam_krb5)的计算机上,请不要移除这些软件包。

我同样的问题,我检查/var/log/auth.log和syslog的错误。 事实certificate,我的LDAP服务器无法到达,并放缓了一切。

我没有再使用基于LDAP的身份validation,所以我从/etc/nsswitch.conf中删除了所有的“ldap”引用

从那时起,一切都像魅力一样。

SELinux的情况

如果相同的sudo命令只在守护进程中慢,而在命令行上则很快,那么最有可能是由SELinux引起的。 (SELinux =默认情况下在Fedora中启用的NSA安全增强Linux内核模块。)

典型的情况是一个http服务器和一个服务器pipe理的特殊脚本,在sudoers限制:

 apache ALL=(root_or_user) NOPASSWD: /full/path/the_safe_command 

在这种情况下,通常在审计日志ausearch -m avc -ts today中没有关于SELinux的报告,但是如果我们通过setenforce 0暂时禁用强制执行,则脚本运行得很快。 (然后通过setenforce 1启用)

系统日志(journalcrl)中唯一相关的消息是延迟25秒后的消息:

… sudo […] pam_systemd(sudo:session):无法创build会话:没有收到回复。 可能的原因包括:远程应用程序未发送回复,消息总线安全策略阻止回复,回复超时过期或networking连接中断。
… sudo […]:pam_unix(sudo:session):通过(uid = 0)为用户root打开的会话

logging所有沉默的“不审核”SElinux消息可以由semodule -DB启用,并由semodule -B再次禁用。
(我希望在这里很快写一个SELinux策略模块,或者可以使用这个答案的方法。)

您是否使用LDAP进行身份validation?

如果是这样,你可能想使用绑定策略软。 在/etc/ldap/ldap.conf(或/etc/ldap.conf)中:

 bind_policy soft 

听起来就像你在authentication链中有某种超时。 检查sudo如何尝试authentication并注意瓶颈。