Apache 2.4 с FastCGI php5-fpm на Ubuntu 14.04

Я пытаюсь заменить SuPHP на FastCGI. Раньше у меня были папки с разными владельцами и группами. Каждая группа также имела www-данные в качестве члена. Когда любой файл php запускался с помощью браузера, он запускался как владелец файла. Таким образом, если файл принадлежал пользователю A (группа A — www-data и A в качестве участников), он выполнялся как пользователь A.

shell_exec('whoami') => return A

Теперь я установил fastcgi и настроил его для запуска файлов PHP.

Вот мой файл php5-fpm.conf

<IfModule mod_fastcgi.c>
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
        </IfModule>

Моя проблема в том, что теперь, когда я запускаю тот же файл, который принадлежит A,

shell_exec('whoami') => return www-data

Что я делаю неправильно?


person ksb    schedule 05.09.2014    source источник


Ответы (2)


Вы можете заменить suPHP на FastCGI+PHP-FPM, но вам потребуется настроить пул FPM для каждого пользователя и виртуальный хост для каждого пользователя (поскольку вам понадобятся отдельные директивы FastCgiExternalServer для каждого пользователя/пула, и они действительны только для каждого виртуального хоста).

Например, в заданном виртуальном корне:

<FilesMatch "\.php$">
  SetHandler php5-fcgi
</FilesMatch>
Action php5-fcgi /php5-fcgi-username
Alias /php5-fcgi-username /usr/lib/cgi-bin/php5-fcgi-username
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-username -socket /var/run/php5-fpm-username.sock -pass-header Authorization

а затем в конфигурации пула FPM вы можете использовать что-то вроде:

listen = /var/run/php5-fpm-username.sock
listen.owner = www-data
listen.group = www-data
listen.mode=0660
user = ownerusername
group = ownerusergroup
pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 120s
pm.max_requests = 50000
catch_workers_output = yes

Параметры пула listen.owner и listen.group FPM — это пользователь/группа веб-сервера (этот пользователь — единственный, кому разрешено подключаться к сокету PHP-FPM).

Параметры пула FPM пользователя и группы — это пользователь и группа, используемые для запуска скриптов PHP.

Если у вас 10 пользователей, вам потребуется 10 пулов FPM.

Производительность намного лучше с FastCGI+PHP-FPM при большом количестве совпадений, но настройка конфигурации сложнее. Для сайта/приложения с небольшим количеством обращений в секунду я бы не стал заморачиваться с FastCGI и PHP-FPM. Кроме того, с suPHP вы получаете php.ini для каждого пользователя, который вы можете редактировать без перезапуска веб-сервера, с PHP-FPM все пулы используют один и тот же php.ini, и вам нужно перезапустить демон FPM, чтобы перезагрузить его.

person MV.    schedule 12.10.2014

whoami просто показывает вам вашего текущего пользователя, под которым запущен текущий скрипт.

В Ubuntu через fastcgi вы запускаете свои скрипты как пользователь www-data, а не как пользователь, которому принадлежит этот файл. Это задумано, это помогает вам ограничить доступ веб-скриптов к файлам, к которым у них нет доступа. Если вам нужно изменить это поведение, вам нужно изменить пользовательский apache где-то в файлах конфигурации.

В моей системе это указывается в /etc/apacyhe2/envvars путем установки этих двух переменных среды:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
person baldrs    schedule 05.09.2014
comment
Итак, с помощью fastcgi я не могу воспроизвести поведение suPHP? Все, что мне нужно, это запустить файл PHP в качестве владельца (именно поэтому я использовал suPHP). Смена пользователя apache не решает мою проблему. Мне нужно запустить файл PHP не как один пользователь, каждый файл нужно запустить как пользователь, который является владельцем - person ksb; 05.09.2014
comment
Нет, ты не можешь. Целью suPHP является обеспечение такого поведения, которое довольно необычно. Вы должны продолжать использовать suPHP, если вам это нужно. - person baldrs; 05.09.2014
comment
О, хорошо, но я нашел эту тему fastcgi.com/archives/ fastcgi-developers/2011-May/000717.html, в котором говорилось о том же самом, и этот парень смог решить эту проблему. Я не уверен, как, хотя! - person ksb; 05.09.2014
comment
Почему, во-первых, вам нужно запускать php-файлы как его владелец? - person baldrs; 05.09.2014
comment
fastcgi.com/archives/fastcgi-developers/2011-May/ 000720.html Решено: в php 5.3.3 необходимо настроить параметр --enable-fpm (FastCGI Process Manager). Мне нужно создать среду массового виртуального хостинга, и suPHP сделал эту работу за меня, позволив всем файлам запускаться их конкретными пользователями... - person ksb; 05.09.2014