PHP shell exec, отказано в разрешении на выполнение - скрипт оболочки rwxrwxrwx
В настоящее время я использую ssh в удаленной системе CentOS 5.6, в которой работает веб-сервер Apache. Мне нужно использовать двоичный файл poppler pdftohtml
, который, к сожалению, в настоящее время не установлен на этой машине. Поэтому я скачал пакет poppler и создал его в своей папке пользователя. Поскольку я не являюсь системным администратором, я не делал
make install
И у меня есть все мои скомпилированные файлы под
/users/myfolder/poppler-0.18.2/
Файл, который мне нужно выполнить через php shell_exec()
, это
/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 answers
То, что файл является исполняемым для пользователя, не означает, что пользователь действительно может выполнить файл. Пользователь также должен иметь возможность "получить доступ" к файлу: пользователю требуется разрешение на выполнение для всех "родительских каталогов", в вашем случае для /users, myfolder, poppler-0.18.2 и utils.
Предполагая, что /пользователи - это та же базовая вещь, что и /home, у всех должно быть +x на этом. Оттуда вы можете установить его: просто сделайте chmod o+x /users/myfolder /users/myfolder/poppler-0.18.2 /users/myfolder/poppler-0.18.2/utils
(Примечание: Это позволит все должны выполнить этот двоичный файл, а не только Apache.)
Если пользователь apache и вы разделяете группу, было бы лучше использовать каталог poppler и все, что принадлежит этой группе, и установить g+x вместо o+x.