1

Я пытаюсь выполнить скрипт от имени другого пользователя (скажем, Марвин):

$ sudo -u marvin scriptname

На одной машине (Ubuntu 14.04) команда работает, и сценарий выполняется успешно.

На другой машине (Kubuntu 16.04) при запуске той же команды выдается ошибка

marvin is not in the sudoers file.  This incident will be reported.

Марвина нет в списке sudoers ни на одной машине. Это не должно иметь значения, так как для выполнения скрипта не требуются права sudo. Я использую sudo, чтобы действовать как Марвин, но у меня есть права sudo на обеих машинах. Сам Марвин не пытается выполнить действие sudo.

Почему это происходит? Должна быть разница между двумя машинами, но я не могу ее найти. В обеих системах владение файлами и разрешения идентичны.

Изменить: Файлы /etc/sudoers на этих двух машинах практически идентичны; соответствующая часть

root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Не упомяну ни одного обычного пользователя, но я (борея) являюсь членом группы sudo в каждом. Оба имеют закомментированную строку импорта из /etc/sudoers.d/ , и этот каталог пуст, за исключением README на обеих машинах.

1 ответ1

2

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

При вызове sudo проверяет правила для вызывающего пользователя. В вашем примере это означает, что правила для пользователя borea оцениваются первыми, а не те, если они есть, для пользователя marvin.

Сообщение об ошибке от вызова определенно не помогает прояснить этот момент.

Типичная запись с полной привилегией sudo в sudoers выглядит следующим образом:

borea ALL = (ALL) ALL

Это то же утверждение с контекстом о том, что означает каждый элемент:

Who:                     borea 
On hosts:                ALL
Can run as users:        (ALL)
The commands:            ALL

Ключевая запись в контексте вашего вопроса - третья. Если для этого параметра не установлено значение «ВСЕ», для него задан список пользователей, который не включает marvin, вызов не будет выполнен.

Вот более сложный пример со страницы руководства:

alan    ALL = (root, bin : operator, system) ALL

Этот параметр переводится в:

Пользователь alan может выполнить любую команду как пользователь root или bin, опционально установив для группы оператор или систему.

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

Другие вещи, чтобы смотреть на:

Судя по вашим отзывам, проблема не в файле sudoers, который напрямую сконфигурирован для пользователя borea. Вот прачечный список точек данных для сбора и вещей, которые нужно попробовать. Обновите свой вопрос с результатами (особенно любые различия, замеченные между этими двумя машинами).

1. Эта команда суммирует ваши привилегии и ограничения, связанные с 'sudo', проверьте, есть ли разница между двумя компьютерами:

 sudo -l -U borea

2. Повторите то же самое для пользователя marvin. Определенно не обязательно, чтобы Марвин был в sudoers, чтобы sudo -u работал, но это хорошая точка данных. Возможно, что Марвин унаследовал некоторые настройки по членству в группе и т.д.

 sudo -l -U marvin

3. На обеих машинах проверьте состояние учетной записи marvin на наличие различий. finger может быть не установлен по умолчанию; в этом случае сначала используйте sudo apt-get install finger .

 sudo finger -l marvin
 sudo passwd --status marvin
 id marvin

4. Попробуйте открыть оболочку, используя учетную запись marvin . su использует другой метод для повышения привилегий:

 sudo su marvin

5. Предполагая, что учетная запись root включена для доступа к оболочке (я думаю, по умолчанию Ubuntu все еще отключает это), попробуйте это:

 sudo -s
 sudo -u marvin scriptname

6. Подтвердите права доступа к /etc /sudoers:

 ls -alt /etc/sudoers

Результат должен начинаться с -r--r----- 1 root root ... Если это не так, исправьте это с помощью:

 sudo chmod 440 /etc/sudoers
 sudo chown root:root /etc/sudoers

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

8. Последнее - проверьте, есть ли у вас файл /etc/sudo.conf на одной или обеих машинах. Создайте копию обоих файлов, если это так, и перенесите их на один компьютер. бежать

 diff sudo.conf.machine1 sudo.conf.machine2

искать различия в конфигурации. Сделайте то же самое с файлом /etc /sudoers (используя diff), чтобы найти все дельты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .