2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 05:11 
Из консоли по ssh захожу из-под myusername и выполняю:

Код:
#cd /var/www/myusername/data/www/mysitename/tmp
/var/www/myusername/data/www/mysitename/tmp# /usr/bin/pdflatex myfile.tex

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

Но когда вызываю эту же команду из PHP скрипта, который расположен по адресу /var/www/myusername/data/www/mysitename/myscript.php

Вызываю так
Код:
$pipes = array();
$options = array();
$cmd = '/usr/bin/pdflatex myfile.tex';
$cwd = /var/www/myusername/data/www/mysitename/tmp;
proc_open( [math]$cmd, $[/math]options, [math]$pipes, $[/math]cwd )


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

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

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 05:35 
Можно попробовать сравнить set-переменные. Даже если процесс выполняется от имени myusername, у разных shellов ещё куча параметров и способов инициализации.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 09:33 
iifat в сообщении #1004324 писал(а):
Можно попробовать сравнить set-переменные. Даже если процесс выполняется от имени myusername, у разных shellов ещё куча параметров и способов инициализации.
А как их посмотреть?

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 13:11 
Своим способом дайте команду '/bin/sh -c set > file'

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 17:30 
Выполнил:
Используется синтаксис Bash
#!/bin/sh
cd /var/www/MyUserName/data/www/MySiteName/tmp
sh -c set > myset.txt


Это через консоль ssh:
Код:
HOME='/var/www/MyUserName/data'
IFS='    
'
LOGNAME='MyUserName'
MAIL='/var/mail/MyUserName'
OLDPWD='/var/www/MyUserName/data'
OPTIND='1'
PATH='/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games'
PPID='3282'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/var/www/MyUserName/data/www/MySiteName/tmp'
SHELL='/bin/bash'
SHLVL='1'
SSH_CLIENT='MyHomeIP 49849 22'
SSH_CONNECTION='MyHomeIP 49849 MySiteIP 22'
SSH_TTY='/dev/pts/0'
TERM='xterm'
USER='MyUserName'
_='/bin/sh'
Это из CGI-скрипта:
Код:
DOCUMENT_ROOT='/var/www/MyUserName/data/www/MySiteName'
GATEWAY_INTERFACE='CGI/1.1'
HTTP_ACCEPT='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_ENCODING='gzip, deflate'
HTTP_ACCEPT_LANGUAGE='ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'
HTTP_CACHE_CONTROL='max-age=0'
HTTP_CONNECTION='keep-alive'
HTTP_COOKIE='PHPSESSID=99711745191f0878aec95f98a307de12'
HTTP_HOST='MySiteName'
HTTP_USER_AGENT='Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0'
IFS='    
'
OLDPWD='/var/www/MyUserName/data/www/MySiteName/cgi-bin'
OPTIND='1'
PATH='/usr/local/bin:/usr/bin:/bin'
PPID='3327'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/var/www/MyUserName/data/www/MySiteName/tmp'
QUERY_STRING=''
REMOTE_ADDR='MyHomeIP'
REMOTE_PORT='49862'
REQUEST_METHOD='GET'
REQUEST_URI='/cgi-bin/test.cgi'
SCRIPT_FILENAME='/var/www/MyUserName/data/www/MySiteName/cgi-bin/test.cgi'
SCRIPT_NAME='/cgi-bin/test.cgi'
SERVER_ADDR='MySiteIP'
SERVER_ADMIN='admin@MySiteName'
SERVER_NAME='MySiteName'
SERVER_PORT='80'
SERVER_PROTOCOL='HTTP/1.1'
SERVER_SIGNATURE=''
SERVER_SOFTWARE='Apache/2.2.22 (Debian)'

Это из PHP-скрипта:
Код:
DOCUMENT_ROOT='/var/www/MyUserName/data/www/MySiteName'
GATEWAY_INTERFACE='CGI/1.1'
HTTP_ACCEPT='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_ENCODING='gzip, deflate'
HTTP_ACCEPT_LANGUAGE='ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'
HTTP_CACHE_CONTROL='max-age=0'
HTTP_CONNECTION='keep-alive'
HTTP_COOKIE='PHPSESSID=99711745191f0878aec95f98a307de12'
HTTP_HOST='MySiteName'
HTTP_USER_AGENT='Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0'
IFS='    
'
OPTIND='1'
ORIG_PATH_INFO='/test.php'
ORIG_PATH_TRANSLATED='/var/www/MyUserName/data/www/MySiteName/test.php'
ORIG_SCRIPT_FILENAME='/var/www/php-bin/MyUserName/php'
ORIG_SCRIPT_NAME='/php-bin/php'
PATH='/usr/local/bin:/usr/bin:/bin'
PPID='3566'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/var/www/MyUserName/data/www/MySiteName'
QUERY_STRING=''
REDIRECT_HANDLER='application/x-httpd-php5'
REDIRECT_STATUS='200'
REDIRECT_URL='/test.php'
REMOTE_ADDR='MyHomeIP'
REMOTE_PORT='50325'
REQUEST_METHOD='GET'
REQUEST_URI='/test.php'
SCRIPT_FILENAME='/var/www/MyUserName/data/www/MySiteName/test.php'
SCRIPT_NAME='/test.php'
SERVER_ADDR='MySiteIP'
SERVER_ADMIN='admin@MySiteName'
SERVER_NAME='MySiteName'
SERVER_PORT='80'
SERVER_PROTOCOL='HTTP/1.1'
SERVER_SIGNATURE='<address>Apache/2.2.22 (Debian) Server at MySiteName Port 80</address>'
SERVER_SOFTWARE='Apache/2.2.22 (Debian)'

В чем может быть проблема?

Из-за того, что USER через скрипт не определен во втором случае?

-- Чт апр 16, 2015 18:55:35 --

Добавление HOME устранило ошибку.
Используется синтаксис PHP
$pipes = array();
$options = array();
$cmd = '/usr/bin/pdflatex myfile.tex';
$cwd = '/var/www/myusername/data/www/mysitename/tmp';
$env = array( 'HOME' => '/var/www/mysitename/data' );
proc_open( $cmd, $options, $pipes, $cwd, $env );


iifat, большое спасибо за подсказку! Где я только не спрашивал, никто не помог.

-- Чт апр 16, 2015 19:06:55 --

Почему HOME не добавляется по умолчанию при вызове? Можно его как-то настроить в php, чтоб не указывать вручную?

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 21:37 
Вообще, не понимаю, почему программа pdflatex может писать в /var/www/mysitename/data, а в /var/www/myusername/data/www/mysitename/ не может. :roll:

Решение с установкой HOME в окружение работает только при PHP как CGI. Если PHP как модуль Apache, то переопределение HOME уже не помогает.

Если PHP как модуль Apache, то set такое:
Код:
APACHE_LOCK_DIR='/var/lock/apache2'
APACHE_LOG_DIR='/var/log/apache2'
APACHE_PID_FILE='/var/run/apache2.pid'
APACHE_RUN_DIR='/var/run/apache2'
APACHE_RUN_GROUP='www-data'
APACHE_RUN_USER='www-data'
IFS='    
'
LANG='C'
OPTIND='1'
PATH='/usr/local/bin:/usr/bin:/bin'
PPID='7861'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/var/www/myusername/data/www/mysiteame/'
Если PHP как модуль Апача, то никак не получится из php вызвать программу от имени пользователя myusername, а не www-data?

-- Чт апр 16, 2015 22:45:35 --

Директория /var/www/myusername/data/mod-tmp имеет владельца www-data. Надеялся, что в ней можно будет писать. Задал 'HOME' => '/var/www/myusername/data/mod-tmp', но не помогает.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 22:11 
Вижу, на директорию ставятся права 750, на скрипт - 640. Вариант - 755 / 644.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 00:51 
Аватара пользователя
ellipse в сообщении #1004555 писал(а):
Директория /var/www/myusername/data/mod-tmp имеет владельца www-data. Надеялся, что в ней можно будет писать. Задал 'HOME' => '/var/www/myusername/data/mod-tmp', но не помогает.
Если PHP установлен как модуль Apache, то переменная HOME не участвует в раздаче.

Если PHP используется как модуль Apache, он наследует права пользователя, с которыми был запущен веб-сервер (обычно это пользователь "nobody"). Это влияет на обеспечение безопасности и реализацию авторизации.

(Оффтоп)

PHP как модуль Apache
В данном случае для работы PHP используется модуль веб-сервера apache mod_php

Достоинства
Самая высокая скорость работы скриптов, по сравнению с другими методами.
Простота работы, сервер сам обрабатывает скрипты.
Общий конфигурационный файл для всех скриптов (php.ini).
Возможность задания переменных конфигурации PHP в конфигурационном файле web-сервера или средствами файла .htaccess

Недостатки
Все скрипты запускаются с правами с которым работает web-сервер, тем самым если есть необходимость записи в какую либо директорию – права доступа необходимо дать на нее всем.
В случае запуска сторонних приложений скриптами (например, почтовая рассылка), нет возможности идентифицировать пользователя который запустил процесс.
Излишняя нагрузка на web-сервер, apache занятый обработкой скриптов может медленно отдавать другие статические данные.
Ошибки в скриптах могут привести к неработоспособности всего web-сервера

Предложил бы посмотреть конфигурационный файл для всех скриптов (php.ini) - на предмет, где определён каталог для документов и даны ли соответствующие права.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:00 
Аватара пользователя
NT2000 в сообщении #1004635 писал(а):
Предложил бы посмотреть конфигурационный файл для всех скриптов (php.ini) - на предмет, где определён каталог для документов и даны ли соответствующие права.

Ага, что-нибудь поправить, и скомпрометировать весь сервер :-)

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:11 
Аватара пользователя
Geen в сообщении #1004638 писал(а):
Ага, что-нибудь поправить, и скомпрометировать весь сервер
Предложить - это значит ему самому разобраться, в каком каталоге необходимо записивать/публиковать скрипты. А вы о чем?

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:29 
Насколько широки ваши возможности на этом сервере? В принципе, есть команды su, sudo, их можно настроить так, чтобы пароль не запрашивался, но это надо глубоко залезть в настройки компа.
Возможно, одной только HOME недостаточно. попробуйте команды 'who am i' (выдаст точно пользователя, от которого работает), 'ls -ld ~' (выдаст домашнюю директорию), кстати, 'ls -ld' для каждой папки на пути к ненайденному файлу. Интересно, не находит он файла, или не там ищет? Поглядите в логе $\TeX$, там есть пути хоть к каким-нить файлам, или он сразу пишет, что не нашёл и всё? Странно, что у вас так мало переменных, у меня раза в два-три поболе.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:34 
Аватара пользователя
NT2000 в сообщении #1004641 писал(а):
Geen в сообщении #1004638 писал(а):
Ага, что-нибудь поправить, и скомпрометировать весь сервер
Предложить - это значит ему самому разобраться, в каком каталоге необходимо записивать/публиковать скрипты. А вы о чем?

Примерно о том же :-) Но только с акцентом не на то, как бы заставить (всех) работать свой скрипт, а на то, как бы ничего не сломать при этом :-)

-- 17.04.2015, 01:37 --

iifat в сообщении #1004644 писал(а):
Странно, что у вас так мало переменных, у меня раза в два-три поболе.

Зависит от настроек Апача - вообще говоря, он не должен выставлять все переменные CGI-скрипту - небезопасно.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 02:12 
Цитата:
Насколько широки ваши возможности на этом сервере?
В общем, полные права. У меня виртуальный выделенный сервер.

iifat в сообщении #1004644 писал(а):
Интересно, не находит он файла, или не там ищет?
Мне кажется, проблема не в чтении, а в записи.
Когда я при PHP как CGI ставил 'HOME' => '/var/www/mysitename/data', то pdflatex создавал временные файлы с шрифтами в директории /var/www/mysitename/data.
Если не задавать 'HOME', то pdflatex пытается создавать временные файлы в рабочей директории, т.е. в /var/www/myusername/data/www/mysitename/tmp, но папки получаются пустые, без файлов.

iifat в сообщении #1004644 писал(а):
Поглядите в логе $\TeX$, там есть пути хоть к каким-нить файлам, или он сразу пишет, что не нашёл и всё? Странно, что у вас так мало переменных, у меня раза в два-три поболе.
Логи тут уже выкладывал: topic95651.html

Проверял, файл /usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd и подобные доступны для чтения из php-скрипта.

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 03:22 
Когда из консоли выполняю, выводит среди прочего:
Код:
mktexmf: /var/www/myusername/data/.texmf-var/fonts/source/lh/lh-t2a/larm0800.mf: successfully generated.
....
mktexmf: /var/www/myusername/data/.texmf-var/fonts/source/lh/lh-t2a/larm0600.mf: successfully generated.


-- Пт апр 17, 2015 04:29:56 --

Оказывается, добавление 'HOME' => '/var/www/myusername/data' при вызове из php само по себе не устранило ошибку. Шрифты при этом не генерируются.

Шрифты образовались в /var/www/myusername/data до этого, когда я запускал pdflatex из консоли от имени myusername. А при вызове из php c укзанием HOME процесс просто приходил на готовенькие шрифты. Вот такие дела. :|

 
 
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 03:46 
Geen в сообщении #1004647 писал(а):
Зависит от настроек Апача
Виноват, не уточнил: я имел в виду переменные сессии ssh, первый список.

 
 
 [ Сообщений: 29 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group