За последние 24 часа нас посетили 25795 программистов и 1728 роботов. Сейчас ищут 919 программистов ...

Права доступа скриптов, выполняемых из PHP+Apache

Тема в разделе "Прочие вопросы по PHP", создана пользователем seugene, 16 апр 2015.

  1. seugene

    seugene Новичок

    С нами с:
    16 апр 2015
    Сообщения:
    2
    Симпатии:
    0
    Проблема в том, что внешняя программа, вызываемая из php работает не так, как если ее вызывать из консоли по ssh.

    Из консоли по ssh захожу из-под myusername и выполняю:
    Код (Text):
    1. #cd /var/www/myusername/data/www/mysitename/tmp
    2. /var/www/myusername/data/www/mysitename/tmp# /usr/bin/pdflatex myfile.tex
    И все отлично работает, в папке tmp образуется pdf файл.

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

    Вызываю так
    Код (Text):
    1. $pipes = array();
    2. $options = array();
    3. $cmd = '/usr/bin/pdflatex myfile.tex';
    4. $cwd = /var/www/myusername/data/www/mysitename/tmp;
    5. proc_open( $cmd, $options, $pipes, $cwd )
    То в папке tmp программа latex создет лог-файл с описанием ошибок. Ошибки связаны с недоступностью файлов шрифтов. Причем создаваемые файлы имеют в атрибутах владельца myusername. Значит PHP и вызываемая им pdflatex выполняется из-под myusername. Причем, если в файле myfile.tex кириллица не используется, то все нормально работает и из PHP. Значит проблема в том, что программа pdflatex не может сгенерировать шрифты.

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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Потому что Apache+mod_php работает под учетной записью www-data.
         — Ваш К.О.
     
  3. seugene

    seugene Новичок

    С нами с:
    16 апр 2015
    Сообщения:
    2
    Симпатии:
    0
    Но ведь файлы создаются с владельцем myusername. Разве это не значит, что и выполнение происходит от имени myusername?
    Ну а если все-таки www-data, то как можно это исправить? Как выполнить внешнюю программу с правами myusername, который прописан в VirtualHost?
     
  4. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Править конфиги апача.
    Проще всего дать учётке www-data права как у myusername. Но, делать так не рекомендуют.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Ты не путаешь php-cli с mod_php? Проверь реально с каким владельцем создаются файлы "через веб".
    У тебя какой Apache и что именно прописано в VirtualHost про пользователя?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    mpm-itk и не надо давать www-data групповые права