在过去的几个月里,我一直在学习 Linux(Fedora 10,然后是 11)(并且非常享受它——就像重新发现计算机一样,有很多东西要学)。
我已将我的用户添加到/etc/sudoers
文件的最后一行,如下所示,这样我在执行sudo
命令时就不会被要求输入密码:
MyUserName ALL=(ALL) NOPASSWD:ALL
现在,每次我使用 执行命令时sudo
,它都会在实际执行任务之前暂停相当长的时间(约 10 秒)。为什么会这样,我该如何解决?我在 Fedora 11 x86 64 上运行 Sudo 版本 1.7.1。
我在 SO 上问了这个问题,它被移到了这里。也就是说,我不再能够像拥有它一样编辑问题,甚至无法接受正确的答案,但事实证明这是解决问题的真正原因以及如何解决它:
在这里找到 用户“rohandhruva”给出了正确的答案:
检查您的系统日志守护程序是否正常工作;这给我带来了问题。
运行以下命令
命令是否在合理的时间内返回?
'Hello world' 出现了
/var/log/syslog
吗?如果不是这种情况,则系统日志守护程序已崩溃。重新启动它应该可以解决您的问题。
是它需要在网络挂载上读取的文件/目录之一,还是以某种方式触发从慢速 USB 设备读取?试试 strace 看看哪里慢了;如果它过得太快,做
每行都将从进入上一个系统调用以来所用的时间开始。
(最初的 sudo 似乎是必要的;我不知道这会对结果造成多大的干扰。)
我最近发现我有同样的问题。没有 sudo 延迟,然后突然之间,大约有 10-20 秒的延迟。我使用以下方法确定了具体问题:
作为你自己:
然后找到系统调用挂在哪里。
在我的情况下,我发现它挂在 DNS 翻译上,显然我列表中的一个 DNSen
/etc/resolv.conf
非常繁忙或坏了。所以我改变了分辨率顺序,然后事情又很快奏效了。我遇到了同样的问题,我检查了 /var/log/auth.log 和 syslog 是否有错误。原来我的 LDAP 服务器无法访问,它减慢了一切。
我不再使用基于 LDAP 的身份验证,所以我从 /etc/nsswitch.conf 中删除了所有“ldap”引用
从那以后,一切都再次像魅力一样运作。
我不确定 Fedora,但我使用过其他系统,sudo 会检查您从哪里登录,如果您的 DNS 设置不正确,可能需要很长时间才能超时。这也可以在 SSH 连接到机器时看到 - 需要很长时间才能得到提示。
就我而言,文件
/etc/sysconfig/network
中不存在主机名(在 中配置)/etc/hosts
;因此,将其添加到上述文件后,该文件会立即打开。我有一个类似的问题,我通过放置主机名(例如 mybox)和主机名命令的完整输出(mybox.mydomain.com)来修复它。这立即清除了它。从 2 分钟打开 /etc/hosts 到即时访问。
SELinux 案例
如果相同的 sudo 命令只在守护进程中慢而在命令行中快,那么它最有可能是由SELinux引起的。(SELinux = NSA Security-Enhanced Linux 内核模块,在 Fedora 中默认启用。)
一个典型的案例是一个http服务器和一个用于服务器管理的特殊脚本,限制在
sudoers
:在这种情况下,审核日志中通常不会报告任何有关 SELinux 的内容
ausearch -m avc -ts today
,但如果我们暂时禁用强制执行,脚本会运行得很快setenforce 0
。(然后通过 重新启用setenforce 1
)系统日志 (journalcrl) 中唯一相关的消息是延迟 25 秒后的这些:
所有静默的“dont-audit”SElinux 消息的日志记录可以由 启用
semodule -DB
和再次禁用semodule -B
。(我希望我能尽快为这个案例写一个 SELinux 策略模块,或者可以使用这个答案中的方法。)
检查您的 /etc/hosts 文件并确保您有 127.0.0.1 的条目
(来源)