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


83

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

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

MyUserName ALL =(全部)NOPASSWD:全部

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


从技术上讲,这算是编辑脚本,对吗?脚本不是程序吗?

6
NOPASSWD:被视为安全隐患,并且无法达到必须首先使用sudo的目的。

我可以买,但是问题仍然在于为什么要花这么长时间。

2
这台机器从哪里获得用户和身份验证?LDAP,也许使用Kerberos?
wzzrd

Answers:


123

我在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>

3
非常正确。令人惊讶的是,如果您在安装时更改了主机名,则Fedora之类的发行版不会编辑/ etc / hosts,但是无论如何。那是给您的开源!
dimo414

这修复了我缓慢的sudo使用,谢谢!我编辑了/ etc / hostname,只是忘了编辑/ etc / hosts文件。

2
将主机名添加到127.0.0.1或:: 1行会导致某些与服务器相关的软件无法绑定到正确的主机名/ IP /接口。此类示例就是Cloudera Manager,Hadoop服务获得错误的主机名并混淆了CM,因为它们都解析为本地主机。我建议阅读下面的其他答案以寻求可能的解决方案。这可能会或不会导致独立工作站没有任何其他计算机连接的问题。
ddcruver 2013年

1
它也可以是/etc/nsswitch.conf(出于类似原因)。我的设置为“主机:dns文件”,因此它在超时很长的DNS服务器上查找我的主机名。我将其更改为“主机:文件dns”,因此现在它将首先在/ etc / hosts中查找。感谢您的回答,这使我不得不关注nsswitch.conf!
艾伦·波特

1
这是解决方案,这太荒谬了。为什么世界上该sudo命令必须查看主机名才能起作用?我的主机名有什么关系sudo echo hello?无论如何,感谢您的回答
smac89 '18

24

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

运行以下命令

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

  2. “ Hello world”会出现在/var/log/syslog吗?

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


9
令人惊讶的是,这是我的问题。有谁会想过。对我来说,解决方案是重新启动syslog。service rsyslog restart
MikeKulls 2015年

同样在这里。service rsyslog restart修复了我的慢速sudo命令。
Pedro Cordeiro

令人惊讶的是,这是我的问题。在此之前,对服务器的整个请求是如此缓慢。我只想知道为什么?
迈克尔·王

10

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

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

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

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


谢谢。这是在硬盘上,没有USB或网络驱动器。

@Cuga:您从strace中学到了什么?

@oligofren:您需要执行sudo strace
ysth 2015年

8

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

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

作为您自己:

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

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

以我为例,我发现它挂在DNS转换上,显然我列表中的DNSen之一/etc/resolv.conf非常繁忙或变坏。因此,我更改了分辨率顺序,然后重新整理声音。


最佳答案(对我而言)!发现我的DBus Broker在网络断开时崩溃,而sudo / KDE在连接它时超时。谢谢!
PSSGCSim

谢谢,这对我有帮助。我还必须撤消对hosts/etc/nsswitch.conf中该行的先前更改。我已将“解析DNS”添加为hosts值的前缀。当我删除此前缀时,sudo再次很快。
mnieber

5

我不确定Fedora,但我使用过其他系统,其中sudo会检查您从哪里登录,如果您的DNS设置不正确,则可能需要一段时间才能超时。在SSH进入计算机时也可以看到这一点-提示会花费很多时间。


5

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

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

从那时起,一切再次变得像魅力。


为什么您对一个已有五年历史的问题发布一个显然不相关的答案(OP未使用LDAP)?
斯文

7
因为它可能会帮助任何人。我检查了这里提到的所有内容,但没有任何帮助。通过检查他是否有任何LDAP连接问题作为sudo命令反应迟钝和无响应的根本原因,其他人可能会集中精力寻找正确的答案。它与DNS相关的答案同等重要,因为其背后的某些内容存在故障,用户无法直接看到它们。我认为该网站是一般的知识来源,而不仅仅是单个问题/答案类型的网站。这是关于收集相关知识。
Sakuraba 2014年

6
另外,你是谁在蓝色地狱中抹黑我的帮助。该站点之所以起作用,是因为激励了知识共享,而不是因为人们的意见不足。如果您不喜欢它,那么您有权忽略它。
Sakuraba,2014年

5

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


3

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


3

SELinux案例

如果相同的sudo命令仅在守护程序中缓慢,而在命令行中快速,则很可能是SELinux引起的。(SELinux = NSA Security-Enhanced Linux内核模块,默认情况下在Fedora中启用。)

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

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

在这种情况下,典型的情况是审核日志中未报告关于SELinux的任何信息ausearch -m avc -ts today,但是如果我们暂时禁用by,则脚本运行得很快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策略模块,或者可以使用此答案中的方法。)


感谢您提供这些信息。从这里的信息中,我然后可以找到相关文章,该文章指出了fprintd(指纹验证)罪魁祸首的可能性。为我删除fprintdfprintd-pam解决了该问题。
KevinO

@KevinO很高兴它可以帮助您找到解决方案。但是我知道我的问题非常具体,我对这个问题的贡献应该只是如何诊断或排除对SELinux的怀疑的方法。
hynekcer

我绝对给了它+1!消息总线导致了解决方案。我在sudo上看了几次很慢,但是您的提示才是我需要的。
KevinO

1

通过查看sudoers我拥有的样本文件,我相信NOPASSWD:在位之后应该有一个空格。


我添加了一个空格,但是仍然有滞后。谢谢你的建议。


1

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

/etc/init.d/nscd force-reload

1

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


0

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

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

bind_policy soft

0

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


0

系统案例

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.