Команда PHP не выполняется system (), exec () или passthru () - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь запустить преобразование файлов из командной строки, используя open office.

openoffice pdf filename.doc 2>&1

когда я выполняю в командной строке от имени пользователя root, он работает нормально и файл конвертируется. Однако, когда я передаю вышеуказанную команду в файл PHP как пользователь apache, она не выполняется.

Я попытался выполнить все три команды PHP:

$command_output=system($command_line,$rtnval);
$command_output=exec($command_line,$rtnval);
$command_output=passthru($command_line,$rtnval);

Также

echo print_r($rtnval); 
echo print_r($command_output);

$rtnval возвращает 1 и $command_output 1. Я запутался, не зная, каков ответ linux (centos) на переданную команду Это очень разочаровывает, потому что я не могу знать, как реагирует система, когда я пытаюсь выполнить команду.

Я также включил /etc/suders разрешение для apache на запуск команды open office.

apache ALL: (ALL) NOPASSWD: / путь / к / openoffice

все же команда не выполняется в PHP как пользователь apache.

Что я пропускаю в PHP как пользователь apache, чтобы не выполнять эту команду?

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Возможно, что openoffice находится не в PATH. Попробуйте выполнить его с полным путем.

2 голосов
/ 25 февраля 2012

Чтобы выполнить вашу команду, как если бы вы были пользователем apache, просто попробуйте это в оболочке:

# switch to superuser
sudo su -
# then switch to the apache user
su - www-data

Вы окажетесь в довольно ограниченной оболочке, из которой обычно невозможно запуститьOpenOffice.Действительно, для этого требуется много среды, которая в любом случае была бы небезопасна для полной настройки apache.

AFAIK, лучше создать выделенного пользователя, которому разрешено запускать вашу команду (например, обычный «www-runner»)user), затем "su" к нему из PHP.Другие меры безопасности включают в себя использование измененного пользователя или использование apparmor для ограничения того, что и где ему разрешено запускать.В любом случае, никогда не позволяйте www-data запускать что-либо от имени root, добавляя www-data в sudoers: это слишком опасно!

Вы также можете взглянуть на libapache2-mod-suphp (suid apacheмодуль для запуска php-скриптов с разрешениями владельца). Его проще использовать, чем выделенного зверя apache suEXEC (http://httpd.apache.org/docs/2.0/suexec.html). Последнее действительно не для быстрого исправления;)

1 голос
/ 22 ноября 2011

Возможно, ваш php в apache работает в безопасном режиме или как он называется, в котором функция system() и другие отключены.

Этот ответ, на самом деле, предполагает, что то, что вы называете ", работает какapache user "фактически работает в среде apache, какой бы она ни была.

...