команда sudo пытается найти имя хоста

15

Недавно я изменил файл sudoers и имя хоста через / etc / hostname. После изменения этих файлов моя команда sudo отнимает много времени. Кроме того, он говорит, что sudo не может разрешить хост kaagini (имя хоста моей машины).

Почему sudo должен знать имя хоста для предоставления разрешения на что-то ??

В моем файле sudoers есть команда "По умолчанию env_reset". Я видел несколько похожих вопросов, но контекст здесь не удаленный вход. Ошибка отображается на локальном хосте.

Первоначальное прибегание к решению проблемы говорит, что файл / etc / hosts должен иметь фактическое имя хоста для 127.0.0.1. Это исправило мою проблему. Но мой актуальный вопрос: зачем нам это нужно для sudo ?? Должно ли sudo работать независимо от места входа в систему.

prathmesh.kallurkar
источник
@OliverSalzburg Я правильно сформулировал вопрос. Пожалуйста, дайте мне знать, если что-то не так
prathmesh.kallurkar

Ответы:

16

/etc/sudoersФайл предназначен , чтобы иметь возможность быть распределены между несколькими серверами. Для этого каждое разрешение в файле имеет хост-часть.

Обычно ALL=это значение означает, что разрешение действительно для любого сервера, однако оно может быть установлено для определенных хостов:

%sudo    kaagini=(ALL) ALL

Чтобы sudo знал, следует ли применять это правило, ему нужно найти хост, на котором он работает. Он использует вызов, который полагается на /etc/hostsправильность, поэтому он терпит неудачу, если он не прав.

Можно утверждать, что sudoне нужно беспокоиться о поиске имени, если для части хоста задано значение ALL=для всех разрешений, но это просто не работает таким образом - кажется, что он работает там, где работает до обработки правил ,

Это действительно для простоты обслуживания, поскольку sudo читает только / etc / sudoers, чтобы увидеть, что пользователь может сделать на текущем компьютере. Но для администратора с 100 серверами для этого может потребоваться 100 различных файлов / etc / sudoers. Поскольку у sudoers есть часть хоста в разрешениях, вы можете поддерживать один файл sudoers и распространять его на все машины, но при этом иметь детализацию того, что пользователи могут делать на каждой машине.

Павел
источник
Спасибо за ответ. Можете ли вы снова зайти в распределенный файл sudoers ?? Видите, у меня есть операционная система, работающая на машине. Если файл разрешений (/ etc / sudoers) для этой операционной системы хранится на других компьютерах. Или ваш ответ означает, что команда sudo может сказать что-то вроде пользователя John может sudo с машины A, но не с машины B ??
prathmesh.kallurkar
Это действительно для простоты обслуживания. sudo читает только / etc / sudoers, чтобы увидеть, что пользователь может сделать на текущем компьютере. Но для администратора с 100 серверами для этого может потребоваться 100 различных файлов / etc / sudoers. Поскольку у sudoers есть часть хоста в разрешениях, вы можете поддерживать один файл sudoers и распространять его на все машины, но при этом иметь детализацию того, что могут делать пользователи на каждой машине.
Пол
еще один вопрос ... должен ли администратор сервера проверять новый файл sudoers каждый раз, когда происходит изменение в главном файле sudoers, или sudo предоставляет способ поддержки файла sudoers по сети ??
prathmesh.kallurkar
@ prathmesh.kallurkar Нет, встроенного метода распространения не существует, но это Linux, так что это нормально. Вы бы использовали rsync или scp или другой инструмент для выполнения этой части.
Пол
1
Я считаю, что это ошибка (если есть только ВСЕ правила, тогда sudo не нужно знать имя своего хоста) и, таким образом, подала bugzilla.sudo.ws/show_bug.cgi?id=916
Матиас Урлих
1

Благодаря связанному отчету об ошибке, поданному Матиасом Урлихсом в другом комментарии, следующая команда решила эту проблему для меня:

Defaults !fqdn

Поместите эту строку в /etc/sudoersфайл

kjones
источник
-3

Puppet - это программное обеспечение для управления конфигурацией, которое способно автоматически конфигурировать парк серверов, читая файлы манифестов Puppet. Такой файл может содержать определение вашего файла / etc / sudoers, который затем может быть передан всем вашим кукольным «агентам» из вашего кукольного «хозяина». Тогда все хосты получат одну и ту же копию вашего файла / etc / sudoers, которая может (и должна) включать определения HOST, поэтому вы можете предоставить некоторым пользователям некоторые команды на некоторых хостах (но не на других).

Фелипе Альварес
источник
3
Можете ли вы расширить свой ответ, чтобы объяснить, что такое марионетка, где вы ее найдете и как вы используете ее для решения проблемы? Из очереди на просмотр
fixer1234
2
Пожалуйста, прочитайте, Как я рекомендую программное обеспечение для некоторых советов относительно того, как Вы должны рекомендовать программное обеспечение. Вы должны предоставить хотя бы ссылку, некоторую дополнительную информацию о самом программном обеспечении и о том, как его можно использовать для решения поставленной задачи.
DavidPostill