Разрешение php shell_exec () на Linux Ubuntu

Я разрабатываю приложение php с использованием Linux-сервера. Моя проблема заключается в выполнении shell_exec() чтобы вызвать некоторый exe-файл, не работает (на самом деле не exe, это своего рода исполняемый файл linux)

 echo shell_exec("whoami"); 

У меня есть демон

 echo shell_exec("ls") 

Я получил некоторое имя файла, но

 echo shell_exec("php -v") 

У меня ничего нет, пустая страница

 echo shell_exec("php ....bla bla bla") 

пустая страница тоже.

Все эти команды, если я набираю терминал (пользователь hu), будут работать. Я искал google в течение нескольких часов, люди говорят, что из-за разрешения. У меня нет опыта работы в Linux. Что мне нужно сделать, чтобы выполнить мою программу в php?

5 Solutions collect form web for “Разрешение php shell_exec () на Linux Ubuntu”

Пользовательским www-data Apache должны быть предоставлены привилегии для выполнения определенных приложений с использованием sudo .

  1. Запустите команду sudo visudo . На самом деле мы хотим отредактировать файл в etc/sudoers Для этого, используя sudo visudo в терминале, он дублирует (temp) файл sudoers для редактирования.
  2. В конце файла добавьте следующий ex: -если мы хотим использовать команду для restart smokeping и команду php для другого действия в вашем вопросе,

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php

(Предполагается, что вы хотите запускать команды restart и php с использованием привилегий суперпользователя (root). И вы используете команду php в usr/bin/ path)

Однако, если вы хотите запускать каждое приложение с использованием привилегий суперпользователя, добавьте следующее вместо того, что указано выше. Возможно, вы не хотите делать это, а не для ALL команд, очень опасно.

 www-data ALL=NOPASSWD: ALL 

3. После редактирования файла sudoers (по visudo мы редактируем временный файл sudoers чтобы сохранить и закрыть файл temp (visudo) для записи в файле sudoers . ( wq! )

4. Вот что, теперь используйте exec() или shell_exec следующим образом внутри вашего скрипта xxx.php . не забудьте использовать sudo перед использованием команды в скрипте php.

например: –

 exec ("sudo /etc/init.d/smokeping restart 2>&1"); 

или

 shell_exec("sudo php -v"); 

Поэтому в вашей проблеме добавьте команды, которые вы хотите использовать, к step no (2.) когда я добавляю и изменяю ваш php-скрипт так, как вы хотите.

вот та же проблема, что и ваша https://stackoverflow.com/a/22953339/1862107

Попробуйте указать весь путь к двоичному файлу php. Например, /usr/bin/php

Если вы этого не знаете, найдите его, используя: which php

Обычно вы хотите указать полные пути к приложениям, таким как whoami , ls и php . Если вы не знаете, что такое местоположение программы (полный путь), вы можете найти следующее:

 $ type php php is /usr/bin/php 

Затем укажите его так, как в вашем скрипте.

 <?php echo shell_exec("/usr/bin/php ....bla bla bla"); ?> 

Ограничивает ли ваш php.ini доступный набор команд?

Это из моего /etc/php5/php.ini

 ; When safe_mode is on, only executables located in the safe_mode_exec_dir ; will be allowed to be executed via the exec family of functions. ; http://php.net/safe-mode-exec-dir safe_mode_exec_dir = 

Как отлаживать проблемы shell_exec

Хорошо, здесь у нас есть проблема: какая-то вещь работает в терминале и не работает в php shell_exec (или exec, spawn, что угодно). Давайте подумаем: в чем разница между вами и php? Вот три:

PHP выполняется из правил HTTP-сервера

Действительно, ваш терминал работает от yourname пользователя, а php выполняется из www-data . Итак, первая идея – открыть терминал от пользователя www-data и попробовать ту же команду. Так….

  • Откройте файл /etc/passwd , найдите строку с пользователем www-data и измените ее оболочку входа (последняя) из /bin/false (или что-то еще) в /bin/bash .
  • Открытый терминал su www-data : su www-data
  • Попробуйте php -v или все, что вы не можете выполнить из php. Если это не сработает – вы увидите хорошие журналы и сможете отлаживать проблему.
  • Не забудьте исправить файл /etc/passwd когда вы закончите

PHP выполняется из PHP .

PHP является параноидальным enogh, и есть много опций в конфигурации apache / nginx и php.ini, которые могут нарушить вашу попытку.

Это немного сложнее для отладки. Здесь есть два варианта:

  • Включить журналы в браузере и увидеть проблему. Измените свой php.ini , включите display_errors и все другие флаги, чтобы увидеть ошибки в браузере. Они вы можете читать и отлаживать их.

  • Получите оболочку www-data (см. Первый раздел) и выполните что-то вроде

echo '<?php shell_exec("php -v"); ?>' | php

который будет выполнять тот же php-код в консоли, и вы сможете видеть ошибки и отлаживать.

PHP выполняется из SELinux / apparmor

Selinux и apparmor – это вещи безопасности, которые запрещают приложениям выполнять определенные действия (например, нерест других приложений или некоторых других приложений). Возможно, он включен на вашем сервере.

Чтобы проверить – отключите selinux / apparmor и проверьте, существует ли проблема.

Исправить – прочитайте соответствующее руководство и исправьте разрешающие правила для вашего дела.

  • ksh loop: "для dir in find .. do" не работает, в отличие от "для dir in ls .. do"
  • Как программы с программным обеспечением с оболочкой уравновешивают скорость вывода / ввода?
  • Bash не может видеть обновление PATH
  • если команда find -exec
  • bash: /home/user/.ssh/authorized_keys: нет такого файла или каталога
  • Условный оператор Баша и присвоение
  • Выполняет ли командный скрипт командный скрипт?
  • Независимый от оболочки путь к cp dotfiles из папки в другую
  • Как найти файл с правами на чтение из корневого каталога?
  • Что не так с этим вызовом sed -i?
  • Многомесячный просмотр в календаре (cal) в OS X
  • Interesting Posts

    Что такое канал?

    Не удалось запустить скрипт python – Отказано в разрешении

    Как удалить строку символов после и до определенного символа?

    Переменная локали LANGUAGE – как установить английский как основной язык? Ошибка в gettext?

    Запустить команды командной оболочки с правами root без предоставления прав пользователя sudo?

    Awk, результат печати

    Как определить, используют ли мои службы runit или init?

    копирование и работа с файлами (папками) OSX .app в linux

    Bash, интересуется переменной echo $

    Трейлинг слэш на символических ссылках на каталоги

    Как создать дополнительный интерфейс?

    Попытка установить шрифты в Linux Mint Lisa, но похоже, что у меня есть права или проблема с владением

    Сохранение результата между выполнением сценария

    Показывать информацию GEO IP в Firefox при использовании tor

    Как загрузить pdf-файлы, на которые ссылаются страницы одного или двух уровней внутри семени

    Linux и Unix - лучшая ОС в мире.