Вызов сценария оболочки из 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 в 02:11

3 ответа

Недавно я опубликовал проект, который позволяет 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
ответ дан 8 November 2011 в 02:11

Используйте "suexec"... в сервере Ubuntu 10.04:

sudo apt-get install apache2-suexec-common

Включите suexec:

sudo a2enmod suexec

Отредактируйте файл конфигурации для соответствия сайту:

sudo -e /etc/apache2/suexec/www-data

Затем посмотрите Используя suEXEC на Apache.org для конфигурирования файла (файлов) конфигурации Apache.

Другой подход...

Позвольте www-пользователю-данных работать для выполнения program1 и program2 без пароля:

sudo visudo

Добавьте к содержанию sudoers файла:

User_Alias WWW_USER = www-data
Cmnd_Alias WWW_COMMANDS = /sbin/program1, /sbin/program2
WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS

Сохранить.

Еще один с suPHP

2
ответ дан 8 November 2011 в 02:11

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

0
ответ дан 8 November 2011 в 02:11

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

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