Недавно я изменил файл sudoers и имя хоста через /etc/hostname. После изменения этих файлов моя команда sudo занимает много времени. Кроме того, он говорит, что sudo не может разрешить хост kaagini(имя хоста моей машины).
Почему sudo необходимо знать имя хоста для предоставления разрешения на что-либо?
В моем файле sudoers есть команда "Defaults env_reset". Я видел несколько похожих вопросов, но контекст здесь не удаленный вход. Ошибка отображается на локальном хосте.
Первоначальный поиск в Google для решения проблемы говорит, что файл /etc/hosts должен иметь фактическое имя хоста для 127.0.0.1. Это исправило мою проблему. Но мой фактический вопрос: почему нам это требуется для sudo?? Должен ли sudo работать независимо от места входа.
решение1
Файл /etc/sudoers
предназначен для распространения между несколькими серверами. Для этого каждое разрешение в файле имеет часть хоста.
Обычно это значение равно ALL=
, что означает, что разрешение действительно для любого сервера, однако его можно установить для определенных хостов:
%sudo kaagini=(ALL) ALL
Чтобы sudo знал, следует ли применять это правило, ему нужно найти хост, на котором он запущен. Он использует вызов, который полагается на /etc/hosts
правильность, поэтому он терпит неудачу, если он неверен.
Можно утверждать, что sudo
нет необходимости беспокоиться о поиске имени, если хостовая часть настроена на ALL=
все разрешения, но это просто не работает таким образом — похоже, что он определяет, где он запущен, до обработки правил.
Это действительно сделано для простоты обслуживания, так как sudo читает только /etc/sudoers, чтобы увидеть, что пользователь может делать на текущей машине. Но как администратору со 100 серверами это может потребовать 100 различных файлов /etc/sudoers для обслуживания. Поскольку sudoers имеет часть хоста в разрешениях, вы можете поддерживать один файл sudoers и распространять его на все машины, при этом сохраняя детализацию того, что пользователи могут делать на каждой машине.
решение2
Благодарясвязанный отчет об ошибкеподанному Маттиасом Урлихсом в другом комментарии, следующая команда решила для меня проблему:
Defaults !fqdn
Поместите эту строку в /etc/sudoers
файл
решение3
Кукольныйэто программное обеспечение для управления конфигурацией, которое способно автоматически настраивать парк серверов, считывая файлы манифестов Puppet. Такой файл может включать определение вашего файла /etc/sudoers, которое затем может быть передано всем вашим puppet-"агентам" с вашего puppet-"мастера". Затем все хосты получат одну и ту же копию вашего файла /etc/sudoers, который может (и должен) включать определения HOST, поэтому вы можете предоставить некоторым пользователям некоторые команды нанекоторые хосты(но не на других).