Arhn - архитектура программирования

wkhtmltopdf, интегрированный с php, не работает на Centos (доступ запрещен)

Я установил wkhtmltopdf на свой сервер Centos. В шелле все работает нормально. Если я попытаюсь отправить команду в оболочке:

/usr/local/bin/wkhtmltopdf http://www.google.it /var/www/html/test_report.pdf

или просто

wkhtmltopdf ... /var/www/html/test_report.pdf

все идет хорошо, но то же самое не работает, если я использую команду exec в php-скрипте:

exec("/usr/local/bin/wkhtmltopdf http://www.google.it /var/www/html/test_report.pdf");

Я изменил chmod папки html в 0777, но в access.log у меня есть следующий ответ:

[08/окт/2012:17:11:18 +0200] "GET test_report.php HTTP/1.1" 200 311 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1 "

Тот же скрипт отлично работает на сервере Windows 2003.

Есть ли способ обойти эту ошибку? Спасибо.

08.10.2012

Ответы:


1

Скорее всего, SELinux блокирует его, у меня была такая же проблема однажды.

Не отключайте SELinux (это просто плохая идея / ленивый способ «исправить» это), но вместо этого используйте инструмент audit2allow, чтобы выяснить, какие логические значения контекста / SELinux необходимо изменить.

См. http://wiki.centos.org/HowTos/SELinux#head-faa96b3fdd922004cdb988c1989e56191c257c01 > для более подробной информации.

08.10.2012
  • как вы думаете, может быть хорошей идеей отключить SELinux и сделать тест, прежде чем пытаться это исправить? 08.10.2012
  • @Michi, вы всегда можете временно отключить его, чтобы убедиться, что SELinux блокирует создание PDF. Просто запустите setenforce 0, попробуйте еще раз и посмотрите, работает ли это. Повторно включите его с помощью setenforce 1 (я настоятельно рекомендую оставить его включенным, только с соответствующими правилами). 08.10.2012
  • Ваше решение кажется правильным! я отключил SELinux, и теперь я могу создать файл PDF, используя wkhtmltopdf+php. Теперь проблема: что я должен изменить в SELinux, чтобы он работал с правильным правилом? (учитывайте, что я совсем новичок в Linux!) 09.10.2012
  • @Мичи Рад слышать. Чтобы найти злодея, перейдите по ссылке, которую я разместил ранее. Используйте audit2allow, чтобы узнать, что нужно сделать. Я не думаю, что audit2allow поставляется с установкой CentOS6 по умолчанию, поэтому вам, вероятно, потребуется установить его с помощью yum. Я думаю, что это инструмент другого пакета, поэтому попробуйте yum provides */audit2allow посмотреть, частью какого пакета он является, и установить его. Затем следуйте инструкциям по ссылке выше. 09.10.2012
  • Спасибо за ваши советы! я установил audit2allow, и у меня есть следующий ответ с audit2allow -a: исполнение; #============= httpd_t ============== разрешить httpd_t postgresql_port_t:tcp_socket name_connect; разрешить httpd_t self:process execmem; разрешить запись в httpd_t tmp_t:sock_file; #============= xdm_t ============== разрешить xdm_t admin_home_t:dir read; Честно говоря... я понятия не имею, что активировать/деактивировать, чтобы разрешить создание файлов с помощью php. 09.10.2012
  • @Michi Я думаю, вам лучше задать ребятам на serverfault.com отдельный вопрос, как именно применить эти настройки. 09.10.2012

  • 2

    В моем случае проблема заключалась в SELinux (как @Oldskool упомянул свой ответ). В execoutput была только информация PROT_EXEC|PROT_WRITE failed.

    Чтобы решить проблему, я запустил:

    setsebool httpd_execmem on

    Я нашел это решение на странице groups.google.com.

    15.10.2015
  • Это сработало для меня как шарм. Но есть ли какие-либо недостатки в использовании этого решения по сравнению с audit2allow, описанным выше? 04.04.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..