sudo 命令试图搜索主机名

pra*_*kar 20 root sudo sudoers

最近,我通过 /etc/hostname.conf 更改了 sudoers 文件和主机名。更改此文件后,我的 sudo 命令需要花费大量时间。此外,它说 sudo 无法解析主机 kaagini(我机器的主机名)。

为什么 sudo 必须知道主机名才能为某些东西提供权限?

我的 sudoers 文件有一个命令“默认值 env_reset”。我看到了一些类似的问题,但这里的上下文不是远程登录。错误显示在本地主机上。

该问题的初始谷歌搜索表明 /etc/hosts 文件必须具有 127.0.0.1 的实际主机名。这解决了我的问题。但我的实际问题是:为什么我们需要这个 sudo ?无论登录位置如何,sudo 都应该工作。

Pau*_*aul 19

/etc/sudoers文件旨在能够在多个服务器之间分发。为了实现这一点,文件中的每个权限都有一个主机部分。

这通常设置为ALL=这意味着该权限对任何服务器都有效,但是它可以设置为特定主机:

%sudo    kaagini=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

为了让 sudo 知道是否应该应用此规则,它需要查找运行它的主机。它使用依赖于/etc/hosts正确性的调用,这就是为什么它在错误时失败的原因。

可能会争辩说,sudo如果主机部分设置ALL=为所有权限,则不需要费心进行名称查找,但它只是不能那样工作 - 它似乎在处理规则之前确定它运行的位置.

这实际上是为了便于维护,因为 sudo 只读取 /etc/sudoers 来查看用户可以在当前机器上做什么。但是作为拥有 100 个服务器的管理员,这可能需要维护 100 个不同的 /etc/sudoers 文件。由于 sudoers 在权限中包含主机部分,因此您可以维护单个 sudoers 文件并将其分发到所有机器,但仍然可以细化用户可以在每台机器上执行的操作。

  • 我认为这是一个错误(如果只有所有规则,则 sudo 不需要知道其主机名),因此已提交 https://bugzilla.sudo.ws/show_bug.cgi?id=916 (2认同)

小智 9

感谢Matthias Urlichs 在另一条评论中提交的链接错误报告,以下命令为我解决了这个问题:

Defaults !fqdn
Run Code Online (Sandbox Code Playgroud)

将此行放在/etc/sudoers文件中