2014 dxdy logo

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

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




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


25/11/08
449
Из консоли по 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 
Заслуженный участник


16/02/13
4194
Владивосток
Можно попробовать сравнить set-переменные. Даже если процесс выполняется от имени myusername, у разных shellов ещё куча параметров и способов инициализации.

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 09:33 


25/11/08
449
iifat в сообщении #1004324 писал(а):
Можно попробовать сравнить set-переменные. Даже если процесс выполняется от имени myusername, у разных shellов ещё куча параметров и способов инициализации.
А как их посмотреть?

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 13:11 
Заслуженный участник


16/02/13
4194
Владивосток
Своим способом дайте команду '/bin/sh -c set > file'

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение16.04.2015, 17:30 


25/11/08
449
Выполнил:
Используется синтаксис 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 


25/11/08
449
Вообще, не понимаю, почему программа 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 


31/07/14
705
Я понял, но не врубился.
Вижу, на директорию ставятся права 750, на скрипт - 640. Вариант - 755 / 644.

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 00:51 
Аватара пользователя


28/01/12
467
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 
Заслуженный участник
Аватара пользователя


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

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

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:11 
Аватара пользователя


28/01/12
467
Geen в сообщении #1004638 писал(а):
Ага, что-нибудь поправить, и скомпрометировать весь сервер
Предложить - это значит ему самому разобраться, в каком каталоге необходимо записивать/публиковать скрипты. А вы о чем?

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:29 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 01:34 
Заслуженный участник
Аватара пользователя


01/09/13
4656
NT2000 в сообщении #1004641 писал(а):
Geen в сообщении #1004638 писал(а):
Ага, что-нибудь поправить, и скомпрометировать весь сервер
Предложить - это значит ему самому разобраться, в каком каталоге необходимо записивать/публиковать скрипты. А вы о чем?

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

-- 17.04.2015, 01:37 --

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

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

 Профиль  
                  
 
 Re: Права, с которыми запускаются скрипты из PHP+Apache
Сообщение17.04.2015, 02:12 


25/11/08
449
Цитата:
Насколько широки ваши возможности на этом сервере?
В общем, полные права. У меня виртуальный выделенный сервер.

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 


25/11/08
449
Когда из консоли выполняю, выводит среди прочего:
Код:
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 
Заслуженный участник


16/02/13
4194
Владивосток
Geen в сообщении #1004647 писал(а):
Зависит от настроек Апача
Виноват, не уточнил: я имел в виду переменные сессии ssh, первый список.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group