Вызовите скрипт оболочки из PHP, запустите его как root

Я запускаю ubuntu 11.10. Я хочу иметь возможность вызвать сценарий оболочки из php и запустить этот скрипт как root. Когда мой php пытается вызвать скрипт оболочки как root - например:

$output = shell_exec('sudo /var/www/my_script.sh')

Я получаю эту ошибку в журнале apache:

sudo: no tty present and no askpass program specified

Я изменил владелец скрипта php для root: root. Я добавил эту строку в sudoers:

www-data ALL = NOPASSWD:/var/www/my_script.php

Я понимаю, что я должен прокомментировать эту строку в sudoers:

Defaults    requiretty

Однако такой линии нет в моем файле sudoers. Что мне нужно сделать, чтобы пройти эту ошибку?

3
задан 8 November 2011 в 04:11

2 ответа

Ваша строка sudoers предоставляет доступ для выполнения «my_script.php», в то время как ваш shell_exec вызывает «my_script.sh». Если пароль не требуется, параметр requiretty должен быть неактуальным.

3
ответ дан 25 July 2018 в 20:49

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash (в качестве пользователя: apache / www-data или root при необходимости). Получите его здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/var/www/my_script.sh');
0
ответ дан 4 August 2018 в 18:21

Другие вопросы по тегам:

Похожие вопросы: