it-swarm.cn

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

在过去的几个月中,我一直在学习Linux(Fedora 10,然后是11)(并且非常享受它-就像重新发现计算机一样,有很多东西要学习)。

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

MyUserName ALL =(全部)NOPASSWD:全部

现在,每次我使用Sudo执行命令时,它都会在实际执行任务之前暂停一段明显的时间(约10秒)。为什么会这样,我该如何解决?我在Fedora 11 x86 64上运行Sudo 1.7.1版。

88
Cuga

我在SO)上问了这个问题,然后它就移到了这里。那表示我不再有能力编辑该问题,就好像我拥有它,甚至接受正确的答案一样,但这已经变成成为真正的原因以及解决方法:

在这里找到 那里的用户“ 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>
130
Cuga

检查您的syslog守护程序是否正常运行;这给我造成了问题。

运行以下命令

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

  2. “ Hello world”是否出现在/var/log/syslog

如果不是这种情况,则说明syslog守护程序已崩溃。重新启动它应该可以解决您的问题。

25
MattB

它是在网络安装上需要读取的文件/目录之一,还是以某种方式触发了从慢速USB设备读取数据?尝试使用strace看看它变慢的地方;如果进展太快,

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

每行将从进入上一个syscall所花费的时间开始。

(最初的Sudo似乎是必需的;我不知道这会干扰多少结果。)

11
ysth

我最近发现我有同样的问题。没有Sudo延迟,然后一下子延迟了大约10-20秒。我使用以下方法确定了具体问题:

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

作为您自己:

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

然后找到系统调用挂起的位置。

以我为例,我发现它挂在DNS转换上,显然是我在/etc/resolv.conf非常忙碌或变得糟糕。因此,我更改了分辨率顺序,然后重新整理声音。

9
mdpc

我遇到了同样的问题,我检查了/var/log/auth.log和syslog中的错误。原来无法访问我的LDAP服务器,这减慢了一切。

我不再使用基于LDAP的身份验证,因此我从/etc/nsswitch.conf中删除了所有“ ldap”引用

从那以后,一切再次变得像魅力。

5
Sakuraba

在某些情况下,发现/etc/sysconfig/network中没有配置的主机名(在/etc/hosts/network中配置);因此在添加上述文件后,该文件将立即打开。

5
Zahid Hussain

我不确定Fedora,但我使用了其他系统,Sudo会在该系统上检查您的登录位置,如果您的DNS设置不正确,则可能需要一段时间才能超时。在SSH进入计算机时也可以看到这一点-提出提示需要很长时间。

5
Colin Coghill

SELinux案例

如果相同的Sudo命令是仅在守护程序中减慢并在命令行上快速运行,则很可能是由SELinux引起的。 (SELinux = NSA安全性增强的Linux内核模块,默认情况下在Fedora中启用。)

典型的情况是http服务器和用于服务器管理的特殊脚本,它们受sudoers限制:

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

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

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

... Sudo [...] pam_systemd(Sudo:session):创建会话失败:未收到回复。可能的原因包括:远程应用程序未发送答复,消息总线安全策略阻止了答复,答复超时到期或网络连接断开。
... Sudo [...]:pam_unix(Sudo:session):由(uid = 0)为root用户打开的会话

可以通过semodule -DB启用所有静默的“ dont-audit” SElinux消息的日志记录,并通过semodule -B再次禁用日志记录。
(我希望我很快在此为这种情况写一个SELinux策略模块,或者可以使用 此答案 中的方法。)

3
hynekcer

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

1
Halsafar

检查您的/ etc/hosts文件,并确保您具有127.0.0.1的条目

来源

1
Ryan Emerle

解决所有主机问题之后,如果正在运行nscd之类的DNS缓存应用程序,请确保清除所有错误的DNS缓存:

/etc/init.d/nscd force-reload
1
Roger Smith

通过查看示例sudoers文件,我相信NOPASSWD:位后应该有一个空格。

1
Chris Jester-Young

听起来好像您的身份验证链中有某种超时。检查Sudo如何尝试进行身份验证并注意瓶颈。

0
towo

系统化案例

对我来说,我的系统内存不足,很多进程崩溃了。我的系统是基于systemd的,那里的东西已经崩溃了。我很难记住自己所做的一切,但是:

  • systemctl status <any.service>会超时
  • 我不能Sudo reboot(基于系统)

解决方案

重新启动解决了我的问题,但对我来说只是一个创可贴。您仍然需要找出为什么内存不足/崩溃。

0
Eric Fossum

您正在使用LDAP进行身份验证吗?

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

bind_policy soft
0
jtimberman