在过去的几个月中,我一直在学习Linux(Fedora 10,然后是11),并且非常喜欢它-就像在重新发现计算机,要学习的东西很多。用户进入/etc/sudoers文件的最后一行,如下所示,这样我在执行sudo命令时就不会询问密码:在实际执行任务之前,它会暂停一段明显的时间(约10秒)。为什么会这样,我该如何解决?我正在Fedora 11 x86 64上运行Sudo版本1.7.1。

评论

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

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

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

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

每次使用sudo时,可能重复的操作会在完成之前挂起

#1 楼

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



评论


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

– dimo414
09年8月5日,0:43

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

–乔
2011年5月4日15:10



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

–ddcruver
2013年12月22日在22:14



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

–艾伦·波特(Alan Porter)
15年3月19日在16:12

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

–smac89
18年15月15日在17:30

#2 楼

检查您的syslog守护程序是否正常运行;

运行以下命令

logger 'Hello world'



命令是否在合理的时间内返回?
/var/log/syslog中是否显示“ Hello world”?如果不是这种情况,则syslog守护程序已崩溃。重新启动它应该可以解决您的问题。

评论


令人惊讶的是,这就是我的问题。有谁会想过。对我来说,解决方案是重新启动syslog。服务rsyslog重新启动

– MikeKulls
2015年11月25日上午10:34

同样在这里。服务rsyslog重新启动修复了我的慢速sudo命令。

– Pedro Cordeiro
16年9月2日在16:54

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

– michael wang
17年5月8日在6:43



#3 楼

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

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


每行都将从进入上一个系统调用以来的时间开始。 sudo似乎是必需的;我不知道有多少会干扰结果。)

评论


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

– Cuga
09年7月9日在4:27

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

–ysth
09年7月9日在4:41

@oligofren:您需要执行sudo strace

–ysth
15年5月4日在21:41

#4 楼

我最近发现我有同样的问题。没有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列表中的DNSen之一非常繁忙或变坏。因此,我更改了解析顺序,然后重新整理声音。

评论


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

– PSSGCSim
19年7月13日在7:21

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

–mnieber
19年7月16日在7:33

#5 楼

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

#6 楼

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

我不再使用基于LDAP的身份验证,因此我从/etc/nsswitch.conf中删除了所有“ ldap”引用。 />
从那时起,一切都再次变得像魅力。

评论


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

– Sven
2014年11月25日13:15

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

–樱仓
2014年11月26日10:48



另外谁是你呢?该站点之所以有效,是因为激励了知识共享,而不是因为人们的意见不足。如果您不喜欢它,那么您有权忽略它。

–樱仓
2014年11月26日10:51

#7 楼

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

#8 楼

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

#9 楼

SELinux情况

如果相同的sudo命令仅在守护程序中缓慢,而在命令行中快速,则很可能是SELinux引起的。 (SELinux = NSA Security-Enhanced 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策略模块,或者可以使用此答案中的方法。)

评论


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

– KevinO
17年5月17日在19:44

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

– hynekcer
17年5月17日在22:49

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

– KevinO
17年5月18日在1:19

#10 楼

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

(源)

#11 楼

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

评论


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

– Cuga
2009年7月9日下午4:35

#12 楼

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

/etc/init.d/nscd force-reload


#13 楼

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

#14 楼

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

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

bind_policy soft


#15 楼

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

#16 楼

Systemd Case

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



systemctl status <any.service>会超时
我无法sudo reboot(基于系统)

解决方案

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