更改主机名引发 sudo 解析主机错误

更改主机名引发 sudo 解析主机错误

除其他事项外,我正在尝试使用脚本更改主机名。基本上,脚本会将from和sed的值作为。ubuntu/etc/hostname/etc/hosts

我以前在 Ubuntu 16.04.4 上尝试过这个,效果很好。

现在,在 16.04.6 上(或者只是偶然),我使用相同的脚本时遇到错误。就在我更改时hostname,对文件的更改hosts需要很长时间(可能是因为sudo正在尝试访问尚未放入文件的新主机hosts,但我不知道sudo会使用此类信息),然后我收到错误:

sudo: unable to resolve host xxxx

有时也会sudo: unable to resolve host ubuntu。以下脚本命令会出现同样的问题或失败。

但显然不可能同时改变两个文件的值

为什么会发生这种情况?这是 Linux 发行版中的新内容吗?我读到其他人也遇到过同样的问题,但我以前从未遇到过,我总是能够使用 sudo 编辑这两个文件,没有任何不便。

答案1

sudo使用 glibc 的 libnss 来确定主机名。通常(使用 16.04)nscd正在运行。您可能正在与其缓存过期时间赛跑。相关配置位于/etc/nscd.conf

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           20
    check-files             hosts           yes
    persistent              hosts           yes

check-files将导致nscd“定期检查.../etc/hosts 的修改时间。”

我忽略了非标准配置引起的复杂情况/etc/nsswitch.conf

您应该同时拥有旧主机名和新主机名,/etc/hosts直到旧主机名不再缓存。停止ncsd,然后persistent删除yes/var/cache/nscd/hosts然后启动nscd应该可以。

/etc/hostname仅在启动期间被查阅,并且在这种情况下无关紧要。

hostnamectl顺便说一下,您还应该使用和/或设置主机名,hostname以通知内核以及任何向内核询问主机名的服务(例如通过uname系统调用)了解新主机名。hostnamectl由于 systemd,因此还可以执行各种其他主机名设置。

答案2

来自 sudoers(5) 手册页:

用户规范确定用户可以运行哪些命令(以及以什么用户身份运行)指定主机默认情况下,命令以 root 身份运行,但这可以根据每个命令进行更改。

Sudo 配置文件 (/etc/sudoers) 允许指定用户可以以其他用户身份在哪台机器上运行哪些命令。如果您有很多机器,它很有用,因为您可以在不同的机器上部署相同的 sudoers 文件。您可能有一行将主机名指定为 ubuntu(以前的主机名)。运行该visudo命令,识别该行并使用新主机名对其进行编辑。

相关内容