2014-09-05 105 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守護程序才能重新加載它。