Права доступа при выполнении из-под Apache

Вопросы связанные с работой Apache

Модераторы: Art.i, vasya

Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 2:10 am

Решил создать отдельную тему, т.к. оказалось, что проблема в Apache + PHP.

Из консоли по ssh захожу из-под myusername, который владелец домена mysitename.
Код: выделить все
#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( $cmd, $options, $pipes, $cwd )


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

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

Пробовал даже режим Apache как CGI. Все равно не помогает.
Последний раз редактировалось ijkl Чт апр 16, 2015 7:37 am, всего редактировалось 1 раз.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа Apache+PHP

Сообщение ls » Чт апр 16, 2015 5:31 am

Когда вы выполняете из консоли вы выполняете под кем?
Не под root ли случайно? так как в приглашении # очень все же напоминает что вы root (у пользователя было бы $)
* FirstVDS в twitter в facebook и в вконтакте *
ls
Support team
 
Сообщений: 6390
Зарегистрирован: Чт мар 01, 2007 10:36 am
Откуда: FirstVDS

Re: Права доступа Apache+PHP

Сообщение ijkl » Чт апр 16, 2015 6:08 am

ls писал(а):Когда вы выполняете из консоли вы выполняете под кем?
Не под root ли случайно? так как в приглашении # очень все же напоминает что вы root (у пользователя было бы $)
Нет. Просто я писал в сообщении на память команды. Из под обычного пользователя домена. Разрешил пользователю доступ по ssh и зашел. Сейчас даже еще раз перепроверил на всякий случай. Из консоли прекрасно работает. Как такое вообще может быть? :(
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа Apache+PHP

Сообщение ls » Чт апр 16, 2015 6:49 am

директория может быть текущая не та получается где myfile.tex находится?
* FirstVDS в twitter в facebook и в вконтакте *
ls
Support team
 
Сообщений: 6390
Зарегистрирован: Чт мар 01, 2007 10:36 am
Откуда: FirstVDS

Re: Права доступа Apache+PHP

Сообщение ijkl » Чт апр 16, 2015 6:59 am

ls писал(а):директория может быть текущая не та получается где myfile.tex находится?
Но ведь программа pdflatex успешно читает файл myfile.tex. Причем если в myfile.tex не используются кириллические пакеты, то успешно выполняется.

Или текущая директория должна обязательно совпадать с местом размещения php скрипта? Хотя и так пробовал, т.е. файл myfile.tex был не в tmp, а рядом с php-скриптом.

Решил попробовать из CGI вызвать свою программу:
Код: выделить все
#!/bin/sh
echo Content-type: text/html
echo

cd /var/www/myusername/data/www/mysitename/tmp
/usr/bin/pdflatex myfile.tex

Выдает ту же ошибку, что и при выполнении из php-скрипта:
(/usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd) ! Font T2A/cmr/m/n/10.95=larm1095 at 10.95pt not loadable: Metric (TFM) file no t found. relax l.100 \fontencoding\encodingdefault\selectfont ? ! Emergency stop. relax l.100 \fontencoding\encodingdefault\selectfont ! ==> Fatal error occurred, no output PDF file produced! Transcript written on myfile.log.

Причем в папке /var/www/myusername/data/www/mysitename/tmp программа создала файл myfile.log, владелец которой myusername.

Видимо, проблема не в PHP, а в Apache.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа Apache+PHP

Сообщение ijkl » Чт апр 16, 2015 7:34 am

Может это из-за Suexec?

Удалил /etc/apache2/mods-enabled/suexec.load. Перезапустил Апач. Не помогло.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ls » Чт апр 16, 2015 4:10 pm

а прочитать вообще файлы удается в /usr/share/texlive/texmf-dist/tex/latex/cyrillic/?
ls -l /usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd удается выполнить в скрипте?
* FirstVDS в twitter в facebook и в вконтакте *
ls
Support team
 
Сообщений: 6390
Зарегистрирован: Чт мар 01, 2007 10:36 am
Откуда: FirstVDS

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 4:39 pm

Выполнил:
Код: выделить все
#!/bin/sh
echo "Content-type: text/html"
echo
echo "CGI OK!<br>"

cd /var/www/myusername/data/www/mysitename/teximg/tmp
ls -l /usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd
echo "<br>"
cat /usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd

Удается даже прочитать содержимое:
Код: выделить все
CGI OK!
-rw-rwxr-- 1 root root 2202 Sep 28 2009 /usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd
%% %% This is file `t2acmr.fd', %% generated with the docstrip utility. %% %% The original source files were: %% %% t2lhfnt.fdd (with options: `T2Acmr') %% This file is a generated file from the sources of the `cyrillic' bundle %% in the LaTeX2e distribution. %% %% This is a generated file. %% %% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2008 %% The LaTeX3 Project and any individual authors listed elsewhere %% in this file. %% %% This file was generated from file(s) of the Standard LaTeX `Cyrillic Bundle'. %% .....

Но дело в том, что я для папки /usr/share/ установил для группы rwx, а myusername добавил в группу root. Возможно, проблемы с доступом к другим директориям.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 5:14 pm

Удалил myusername из группы root -- по-прежнему может читать файл.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 5:34 pm

Нашел, что надо какие-то переменные set проверить.

Выполнил:
Код: выделить все
#!/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 через скрипт не определен?
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 6:05 pm

Добавление параметра HOME в окружение устранило ошибку.
Код: выделить все
$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 );

Почему HOME не добавляется по умолчанию при вызове из PHP? Можно его как-то настроить?
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 7:01 pm

Интересно, почему программа может писать в /var/www/mysitename/data, а в /var/www/myusername/data/www/mysitename/ не может?
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Чт апр 16, 2015 9:33 pm

Решение с установкой 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?
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Права доступа при выполнении из-под Apache

Сообщение Mikanoshi » Сб апр 18, 2015 11:05 am

ijkl писал(а):Если PHP как модуль Апача, то никак не получится из php вызвать программу от имени пользователя myusername, а не www-data?

Зависит от MPM и настроек, для присвоения пользователя каждому вхосту нужен ITK, а так всё будет выполняться под тем юзером, под которым запущен апач (точнее его воркер-процессы, опции User и Group).

Попробуй добавить в .htaccess или конфиг вхоста:
Код: выделить все
SetEnv HOME /var/www/mysitename/data
Mikanoshi
 
Сообщений: 205
Зарегистрирован: Сб май 02, 2009 2:03 pm

Re: Права доступа при выполнении из-под Apache

Сообщение ijkl » Вс апр 19, 2015 1:17 am

Поставил в htacess SetEnv HOME /var/www/myusername/data

Теперь ls -ld ~ из CGI выдает:
drwxr-xr-x 7 myusername myusername 4096 Apr 18 02:28 /var/www/myusername/data

whoami выдает: myusername

Но проблему исходную это не решило. Может еще что-то задать надо.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

След.

Вернуться в Apache

Кто сейчас на форуме

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