shell_exec, использующий вызов ajax, не работает во inux

#php #ajax #ubuntu #sh #sudo

#php #ajax #ubuntu #sh #sudo

Вопрос:

У меня есть php-скрипт, который использует shell_exec для вызова сценария оболочки, я использую ajax-вызов php-скрипта,

В mac os он запускается без каких-либо проблем, но когда я пытаюсь запустить его на своей виртуальной машине ubuntu, он не выполняет команду shell_exec при вызове из ajax, но если я запускаю из консоли unix с помощью

 php script.php
 

он запускает shell_exec нормально.

У кого-нибудь раньше была эта проблема?

php-код таков

 <?php

 $output = shell_exec('sudo sh /var/www/html/SIRSProject/WebApp/php/teste.sh'); 

 echo $output;

?>
 

Комментарии:

1. Измените права доступа к файлам вашего сценария оболочки с chmod 777 teste.sh помощью и повторите попытку, возможно, без sudo

Ответ №1:

Скорее всего, это связано с тем, что при вызове через веб-сервер команда будет выполняться от имени другого пользователя по сравнению с тем, когда вы вызываете ее непосредственно в командной строке.

Какой веб-сервер вы используете? Если вы используете apache , например, вы можете увидеть / изменить пользователя, PHP запускается как webs server в User директиве; под Ubuntu это www-data .

Другой причиной может быть sudo запрос пароля, который не может быть предоставлен PHP. Обратите внимание: при запуске на терминале sudo может кэшироваться авторизация для этого сеанса терминала. Так что, возможно, также протестируйте ручное выполнение PHP-скрипта в новом сеансе терминала.

В обоих случаях вам может потребоваться обновить ваш /etc/sudoers , чтобы разрешить неинтерактивное выполнение sudo .

Но имейте в виду: ЭТО ОПАСНО!

Вызов внешней команды sudo с веб-сервера может легко стать огромной угрозой безопасности, позволяя выполнять команды с правами root из Интернета. Выполняйте это, только если вы действительно знаете, что делаете — особенно никогда не доверяйте вводу пользователя!