PHP shell_exec, разрешение на выполнение сценария -rwxrwxrwx отклонено - PullRequest
2 голосов
/ 29 декабря 2011

В настоящее время я работаю над ssh в удаленной системе CentOS 5.6, на которой работает веб-сервер Apache.Мне нужно использовать двоичный файл poppler pdftohtml, который, к сожалению, на данный момент не установлен на этой машине.Поэтому я скачал пакет poppler и собрал его в своей папке пользователя.Поскольку я не системный администратор, я не сделал

make install

, и у меня есть все мои скомпилированные файлы в

/users/myfolder/poppler-0.18.2/

Файл, который мне нужно выполнить через php shell_exec() is

/users/myfolder/poppler-0.18.2/utils/pdftohtml

Если я выполню его через ssh bash, я получу правильный вывод.Если вместо этого я помещу эту строку в скрипт php:

echo shell_exec("/users/myfolder/poppler-0.18.2/utils/pdftohtml");

, я получу следующий вывод:

sh: /users/myfolder/poppler-0.18.2/utils/pdftohtml: Permission denied

Я попытался установить 777 прав доступа к файлу, которые в настоящее время -rwxrwxrwx.Я также заметил, что использование shell_exec("whoami"); приводит к «apache».Разве apache не сможет выполнить скрипт, если права доступа к файлу -rwxrwxrwx?

Я также знаю, что установка poppler через make install решит проблему, но так как это для целей тестирования, я бы хотелизбегайте «заражения» системы за пределами моей личной папки до завершения тестирования.

Спасибо всем, кто поможет!

1 Ответ

9 голосов
/ 29 декабря 2011

Тот факт, что файл является исполняемым для пользователя, не означает, что пользователь действительно может выполнить файл.Пользователь также должен иметь возможность «добраться до» файла: пользователю нужно разрешение на выполнение для всех «родительских каталогов», в вашем случае для / users, myfolder, poppler-0.18.2 и utils.

Предполагая, что / users - это то же самое, что и / home, у всех должно быть + x.Оттуда вы можете установить его: просто выполните chmod o+x /users/myfolder /users/myfolder/poppler-0.18.2 /users/myfolder/poppler-0.18.2/utils

(Примечание: это позволит всем выполнять этот двоичный файл, а не только Apache.)

Если пользователь apache и вы разделяете группу, было бы лучше использовать chown каталог poppler и все, что принадлежит этой группе, и установить g + x вместо o + x.

...