Я запускаю 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. Что мне нужно сделать, чтобы пройти эту ошибку?
Ваша строка sudoers предоставляет доступ для выполнения «my_script.php», в то время как ваш shell_exec вызывает «my_script.sh». Если пароль не требуется, параметр requiretty должен быть неактуальным.
Недавно я опубликовал проект, который позволяет 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');