#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 из Интернета. Выполняйте это, только если вы действительно знаете, что делаете — особенно никогда не доверяйте вводу пользователя!