Я должен выполнить сценарий оболочки от имени другого пользователя, но без запроса пароля.

Я отредактировал файл /etc/sudoers с помощью visudo , добавив следующую строку.

_www  localhost=(otheruser) NOPASSWD:bin/sh /path/to/my/script.sh

Если я понимаю, как работает sudo , это означает, что пользователю _www разрешено работать так же , как и пользователю otheruser , без запроса пароля, только от localhost.

Это верно? Потому что система продолжает запрашивать пароль.

2 ответа2

1

Я думаю, вам нужно правильно указать путь к sh, вы пропускаете первый '/'

_www  localhost=(otheruser) NOPASSWD:/bin/sh /path/to/my/script.sh

Затем попробуйте команду в точности так, как она отображается в файле. Предполагая, что вы вошли как _www:

sudo -u otheruser /bin/sh /path/to/my/script.sh

если это все еще подсказывает, что-то еще не так ...

0

Вот рабочая строка из моего файла sudoers:

www-data ALL=(ALL) NOPASSWD: /usr/local/bin/myapp

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

Мой рабочий пример взят из файла Python, который использует subprocess.Popen и выглядит так:

args = '/usr/bin/sudo /usr/local/bin/myapp -v'
p = Popen(args, stdout=PIPE, stderr=STDOUT, shell=True).communicate()

Надеюсь это поможет.

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