LINUX.ORG.RU

Вопрос по sudo. Как выполнять команду от юзера без пароля?


0

0

Нужно, чтобы munin мог в скрипте выполнить ejabberdctl от имени юзера jabber.

Первое, что приходит в голову:

sudo -u jabber ejabberdctl ...

в скрипте

и

munin ALL=(ALL) NOPASSWD: /usr/sbin/ejabberdctl

в sudoers.

Но фиг там:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

★★★★★

Вот так, только напишешь, проломав голову 10 минут, и находишь ошибку. fixed.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

А, нет, нифига...

Думал, проблема в том, что ejabberdctl в /sbin и от рута только работает. Сделал запуск его от рута - фиг, всё равно та же диагностика...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

И, вообще: su: must be run from a terminal

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от smalcom

Тогда удалось это сообщение («#1) Respect the privacy of others...») получить в консоли :) До этого в консоли работало нормально, а сообщение вываливалось только при попытки исполнить скрипт самим munin'ом.

Добвил в sudoers «munin ALL=(ALL) NOPASSWD: /usr/bin/sudo»

В консоли спрашивать перестало. В munin-cron - спрашивает по-прежнему.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

В общем я настроил
[sudoers]
ALL ALL = (ALL) ALL
user ALL = (resu) ALL
user ALL = NOPASSWD: /home/resu/test
[/sudoers]
user@localhost> sudo -u resu /home/resu/test
it works!
user@localhost>

gnomino
()
Ответ на: комментарий от DonkeyHot

>А "sudo -u jabber /usr/sbin/ejabberdctl" пробовал?

С самого начала. Вручную - работает. В скрипте, запускаемом по «sudo -u munin ./script» - тоже работает. Из скрипта, вызываемого по cron - не работает. Выдаёт запрос, который в первом сообщении привёл.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от gnomino

>Переменные окружения крона?

На что смотреть?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от Paradise_Cracked

>неправильный метод: sudo -S command <<< "pass"

У юзера munin пароля нет. Он /bin/nologin.

Кстати, м.б. из-за этого?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Прописал /bin/bash - то же самое.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

munin ALL = NOPASSWD: /bin/sh /usr/sbin/ejabberdctl в судоерах

и пускать sudo /bin/sh /usr/sbin/ejabberdctl

as33 ★☆☆
()
Ответ на: комментарий от KRoN73

>Из скрипта, вызываемого по cron - не работает

Много раз накалывался -- проблемы всегда были в "опечатках". За исключением одной - с умолчательным requiretty (но судя по тексту это не она). Попробуй объяснить соседу -- часто помогает:)

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>Много раз накалывался -- проблемы всегда были в "опечатках".

Тут опечатка может быть только в двух местах. sudoers и скрипте. И там, и там высматривал всё. Да и работает в ручном-то режиме. А на автомате скрипт тоже запускается. Только пароль спрашивает :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от sdio

>fixed
>fixed

Симптомы те же. Вручную всё отлично, из munin-cron - 

2008/10/31-17:35:02 CONNECT TCP Peer: "127.0.0.1:46739" Local: "127.0.0.1:4949"

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Попробуй в /etc/sudoers закомментарить строку:
Defaults requiretty

Slavaz ★★★★★
()

ию мать.

Догадался сделать вывод whoami из скрипта в файл.

Там оказалось nobody

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от sdio

>а там точно юзер munin?

Как оказалось - нет :)

...

Теперь придётся искать, как запустить от munin'а. А то nobody давать sudo некошерно...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

nobody ALL=(jabber) NOPASSWD:/usr/sbin/ejabberdctl

Сможет запустить только /usr/sbin/ejabberdctl и только от имени юзера jabber.

Ну или фсякие извраты:
munin-cron под nobody пишет файл-флаг с параметрами к /usr/sbin/ejabberdctl, а юзер jabber по крону проверяет и запускает. В этом варианте вообще sudo не нужен

sdio ★★★★★
()
Ответ на: комментарий от sdio

>Что сделал?

Нашёл в настройках munin'а указание юзера и группы для выбранного скрипта. Так что у меня сейчас весь скрипт от юзера jabber запускается. Без всяких sudo :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

>Нашёл в настройках munin'а указание юзера и группы для выбранного скрипта.

Ну при наличие root'a всякое можно

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.