@eugene8086
Математик

Как задавать права при выполнении внешней программы из-под Apache?

Здравствуйте. Я только начинаю изучение, поэтому мои вопросы могут казаться простыми. Но я уже несколько дней бьюсь над этой проблемой и зашел в тупик.

Если коротко, то проблема заключается в том, что внешняя программа, вызываемая из php-скрипта работает не так, как если ее вызывать из консоли через ssh, при том, выполнение происходит из-за под одного и того же пользователя.

Из консоли по ssh захожу из-под myusername (не root) и выполняю:
$cd /var/www/myusername/data/www/mysitename/tmp
/var/www/myusername/data/www/mysitename/tmp$ /usr/bin/pdflatex myfile.tex

И все отлично работает, в папке tmp появляется pdf файл.

Но если вызываю эту же команду из PHP скрипта:
$pipes = array();
$options = array();
$cmd = '/usr/bin/pdflatex myfile.tex';
$cwd = '/var/www/myusername/data/www/mysitename/tmp';
proc_open( $cmd, $options, $pipes, $cwd );

или из CGI-скрипта:
#!/bin/sh
echo Content-type: text/html
echo
cd /var/www/myusername/data/www/mysitename/tmp
/usr/bin/pdflatex myfile.tex

то в папке tmp программа pdflatex создет лог-файл с описанием ошибок. Ошибки связаны с недоступностью файлов некоторых шрифтов. Причем создаваемые файлы имеют в атрибутах владельца myusername. Значит PHP и вызываемая им pdflatex выполняется из-под myusername. Причем, если в файле myfile.tex не используются кириллические пакеты, то все нормально работает и из PHP, и из CGI. Значит проблема в том, что программа pdflatex не может получить или сгенерировать временные файлы с шрифтами.

Из-за чего может быть разница? Какие ограничения в правах дает выполнение через Apache? И главное, как это исправить? Хотя бы в каком направлении искать? Боюсь, что очень долго не смогу решить проблему, если буду изучать всю документацию.

На всякий случай скажу, что ОС Debian7, а pdflatex - программа из пакета texlive, который предназначен для работы с LaTeX.
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 3
bk0011m
@bk0011m
Системный администратор
Скрипт выполняется с правами apache. То есть, если у вас apache работает от пользователя wwwroot или подобного, то и скрипты запускаются от того же пользователя.
Дайте больше прав этому пользователю. Только учитывайте, что и любой другой кто зайдет на ваш сайт, например потенциальный вредитель, сможет получить эти же права.
Ответ написан
Комментировать
@ShamblerR
1. попробуй запускать апачь с fastCGI в таком случае ты сможеш выставить и юзера и группу для каждого сайта, без особых кастылей, да и не забудь ее добавить в группу 0 что воббще то не по феншую.
2. вариант используй нестандартные права на файлы, в частности
linuxsoid.com/blog/standartnye_prava_unix_suid_sgi...
читай сразу про
Биты SUID, SGID и Sticky
Ответ написан
Комментировать
@AVKor
Значит проблема в том, что программа pdflatex не может получить или сгенерировать временные файлы с шрифтами.

Да.
Из-за чего может быть разница?

Когда просто из консоли генерируете pdf-файл, то используется каталог $HOME/.texmf-var.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы