2014-09-05 106 views
0

我想用FastCGI替换SuPHP。 此前,我拥有不同所有者和组的文件夹。每个组都有www数据作为成员。 当使用浏览器运行任何php文件时,它将作为文件的所有者运行。 因此,如果一个文件被用户A所拥有(A组 - www数据和A的成员),它为用户AApache 2.4与FastCGI php5-fpm在Ubuntu 14.04

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 

我在做什么错?

回答

0

whoami只显示您当前的用户,在当前用户下运行当前脚本。

在通过fastcgi的Ubuntu中,您将脚本作为www-data用户运行,而不是作为拥有该文件的用户运行。这是通过设计,它可以帮助您限制Web脚本访问他们不允许访问的文件。如果您需要更改此行为,则需要更改用户apache在配置文件中的某处运行。

在我的系统,这是在/etc/apacyhe2/envvars通过设置这两个环境变量指定:

export APACHE_RUN_USER=www-data 
export APACHE_RUN_GROUP=www-data 
+0

好吧,所以用fastcgi我不能复制suPHP行为?我所需要的就是作为所有者运行PHP文件(这就是为什么我使用suPHP)。更改apache用户并不能解决我的问题。我需要运行PHP文件不是作为一个用户,每个文件需要作为所有者的用户运行 – 2014-09-05 08:53:42

+0

不,你不能。 suPHP的目的是提供这样的行为,这很不寻常。如果需要,您应该继续使用suPHP。 – baldrs 2014-09-05 09:15:06

+0

噢好吧,但我发现这个线程http://www.fastcgi.com/archives/fastcgi-developers/2011-May/000717.html谈到了完全相同的事情,这家伙能够解决它。虽然我不确定! – 2014-09-05 10:09:00

1

你可以用的FastCGI + PHP-FPM取代suPHP但你需要设置每个用户和一个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池参数是Web服务器的用户/组(该用户是唯一允许连接到PHP-FPM套接字的用户)。

用户和组FPM池参数是用于运行PHP脚本的用户和组。

如果您有10个用户,则需要10个FPM池。

当FastCGI + PHP-FPM有很多命中但配置调整更困难时,性能会更好。对于每秒没有太多点击次数的网站/应用程序,我真的不打扰FastCGI和PHP-FPM。此外,通过suPHP,您可以获得每用户php.ini,无需重新启动Web服务器即可编辑,而PHP-FPM所有池共享相同的php.ini,并且需要重新启动FPM守护程序才能重新加载它。