При изменении имени хоста возникает ошибка sudo при разрешении хоста

Среди прочего, я пытаюсь изменить свое имя хоста с помощью скрипта. В основном скрипт sed использует значения ubuntu из / etc / hostname и / etc / hosts .

Я пробовал это в прошлом на Ubuntu 16.04.4 и работала хорошо.

Теперь, 16.04.6 (или просто случайно), я получаю ошибки с тем же сценарием. Так же, как я изменяю имя хоста , изменение файлов hosts занимает много времени (вероятно, потому, что sudo пытается достичь нового хоста, который еще не помещен в файл hosts , но я не знал, что sudo использует такую ​​информацию), и я получаю сообщение об ошибке:

sudo: не удается разрешить хост xxxx

Иногда также sudo: невозможно разрешить хост ubuntu . Следующие команды скрипта имеют те же проблемы или не работают.

Но, очевидно, невозможно изменить значения обоих файлов сразу

Почему это произошло? Это что-то новое в этой версии дистрибутива Linux? Я читал, что у других людей была такая же проблема, но со мной никогда не случалось, я всегда мог редактировать оба файла с помощью sudo без каких-либо других неудобств.

0
задан 5 April 2019 в 18:27
2 ответа

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 и если постоянный равен да , то удаление / var / cache / nscd / hosts , а затем запуск nscd должен работать.

/ etc / hostname просматривается только во время загрузки и не имеет значения в этом случае.

Кстати, вы также должны установить имя хоста с помощью hostnamectl и / или ] hostname , которое информирует ядро ​​и любые службы, которые запрашивают у ядра имя хоста, например, через системный вызов uname о новом имени хоста. hostnamectl также выполняет всевозможные другие настройки имени хоста, потому что systemd.

0
ответ дан 5 December 2019 в 03:35

Из справочной страницы sudoers (5):

Спецификация пользователя определяет, какие команды пользователь может запускать (и как какой пользователь) на указанных хостах . По умолчанию команды запускаются от имени root, но это можно изменить для каждой команды.

Файл конфигурации Sudo (/ etc / sudoers) позволяет указать, какую команду (-ы) пользователь может запускать, как другой (-и) пользователь (-и) и на каком (-ых) компьютере (-ах) . Это полезно, если у вас много машин, так как вы можете развернуть один и тот же файл sudoers на разных машинах. Возможно, у вас есть строка, в которой имя хоста указано как ubuntu (прежнее имя хоста). Запустите команду visudo , определите строку и отредактируйте ее, указав новое имя хоста.

0
ответ дан 5 December 2019 в 03:35

Теги

Похожие вопросы