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

Cug*_*uga 108 linux permissions sudo

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

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

MyUserName ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

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

Cug*_*uga 164

我在 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>
Run Code Online (Sandbox Code Playgroud)

  • 非常正确。如果您在安装时更改主机名,像 Fedora 这样的发行版不会编辑 /etc/hosts 有点令人惊讶,但无论如何。这对你来说是开源的! (3认同)
  • 它也可以是 /etc/nsswitch.conf (出于类似的原因)。我的设置为“hosts: dns files”,因此它在 DNS 服务器上查找我的主机名,超时时间很长。我将其更改为“hosts: files dns”,因此现在它将首先查看 /etc/hosts。感谢您的回答,这促使我查看 nsswitch.conf! (3认同)
  • 这就是解决方案,这太荒谬了。为什么`sudo` 命令必须查看主机名才能工作?我的主机名与 `sudo echo hello` 有什么关系?无论如何,谢谢你的回答 (3认同)
  • 这解决了我 sudo 使用缓慢的问题,谢谢!我编辑了 /etc/hostname,但忘记编辑 /etc/hosts 文件。 (2认同)
  • 将您的主机名添加到 127.0.0.1 或 ::1 行会导致某些服务器相关软件绑定到正确的主机名/IP/接口。一个这样的例子是 Cloudera Manager,hadoop 服务得到了错误的主机名并混淆了 CM,因为它们都解析为 localhost。我建议阅读下面的其他答案以获得可能的解决方案。这可能会也可能不会导致没有其他计算机连接到它的独立工作站出现问题。 (2认同)

小智 28

检查您的 syslog 守护进程是否正常工作;这给我造成了问题。

运行以下命令

logger 'Hello world'
Run Code Online (Sandbox Code Playgroud)
  1. 命令是否在合理的时间内返回?

  2. 'Hello world' 是否出现/var/log/syslog

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

  • 令人惊讶的是,这对我来说是个问题。有谁会想过。我的解决方案只是重新启动系统日志。`服务rsyslog重启` (10认同)

yst*_*sth 12

是它需要在网络安装上读取的文件/目录之一,还是以某种方式触发从慢速 USB 设备读取?试试 strace 看看哪里慢了;如果它过得太快,做

sudo strace -r -o trace.log sudo echo hi
Run Code Online (Sandbox Code Playgroud)

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

(最初的 sudo 似乎是必要的;我不知道这会对结果造成多大影响。)


mdp*_*dpc 11

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

 1. chmod u+s /usr/sbin/strace  (as the root user)
Run Code Online (Sandbox Code Playgroud)

作为你自己:

 1. sudo -K
 2. strace sudo /bin/tcsh
Run Code Online (Sandbox Code Playgroud)

然后找到系统调用挂在哪里。

在我的情况下,我发现它挂在 DNS 翻译上,显然我列表/etc/resolv.conf中的一个 DNSen 非常繁忙或变坏了。因此,我更改了分辨率顺序,并且很快再次运行。


Sak*_*aba 7

我遇到了同样的问题,我检查了 /var/log/auth.log 和 syslog 是否有错误。事实证明,无法访问我的 LDAP 服务器并且它减慢了一切。

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

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

  • 因为它可能会帮助任何人。我检查了这里提到的所有内容,但没有任何帮助。其他人可能会通过检查他是否有任何 LDAP 连接问题作为导致 sudo 命令缓慢且无响应的根本原因,从而专注于通过我的回答来寻找正确的方向。它与 DNS 相关的答案一样重要,因为幕后的某些东西是错误的,用户无法直接看到。我认为这个网站是一个通用的知识来源,而不仅仅是一个单一的问答类型的网站。它是关于收集相关知识。 (7认同)
  • 还有你是谁在诋毁我的帮助。这个网站之所以有效,是因为鼓励分享知识,而不是因为人们被否决了。如果你不喜欢它,那么你有权忽略它。 (6认同)

Col*_*ill 5

我不确定 Fedora,但我使用过其他系统,其中 sudo 会检查您的登录位置,如果您的 DNS 设置不正确,可能需要很长时间才能超时。这也可以在 SSH 进入机器时看到 - 需要很长时间才能提出提示。


小智 5

就我而言,文件中/etc/sysconfig/network不存在主机名(在 中配置)/etc/hosts;因此,将其添加到上述文件后,该文件会立即打开。