Php-Fpm

Suexec/Apache 使用者不是 php-fpm ‘user’

  • January 15, 2019

Suexec/Apache 使用者不是 php-fpm ‘user’。

在我的 php-fpm 池中:

[cdnmin]
user = cdnmin
group = cdnmin
listen = /run/php/php7.0-fpm.cdnmin.sock
listen.owner = cdnmin
listen.group = cdnmin
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

我為測試創建了“index.php”:

<?php 
file_put_contents('test.txt','Test');
echo exec('whoami');
echo '<hr>Current script owner: ' . get_current_user();
phpinfo();
?>

php-fpm 有效,但權限錯誤,如我的 error.log 所示

AH01071: Got error 'PHP message: PHP Warning:  file_put_contents(test.txt):
failed to open stream: Permission denied ...'

php ‘get_current_user()’ return ‘cdnmin’ 這是 php-fpm 池使用者。但 ‘whoami’ 返回 www-data (apache2)

在 /run/php 裡面:

srw-rw-rw-  1 cdnmin   cdnmin     0 Jan 15 15:18 php7.2-fpm.cdnmin.sock

工作目錄 (/var/www/cdn) 歸 cdnmin:cdnmin 所有,為 755。

SuexecUserGroup cdnmin cdnmin 

在虛擬主機的 (apache) 指令上。

我可以找出為什麼 ‘whoami’ 和 get_current_user() 不一樣。

我錯過了什麼?

我正在使用不支持 fastcgi 的 ubuntu 18.04。仿生使用proxy_fcgi。我沒有看到來自 fastcgi 的任何錯誤,因為我使用它總是將請求發送到預設值(www.conf),這就是它變成“www-data”的原因。

問題就解決了。

這裡有一些片段

我的虛擬主機.conf:

   <VirtualHost *:80>
   DocumentRoot /var/www/cdn
   ServerName cdn.wx.dz.co
   ServerAdmin webmaster
   ErrorLog /var/www/cdn/.log/error.log
   CustomLog /var/www/cdn/.log/access.log combined

   SuexecUserGroup cdnmin cdnmin

   <Directory /var/www/cdn>
           Options +ExecCGI
           IncludeOptional /dbc/vhost/common-set.conf
   </Directory>

   <Directory /var/www/cdn/.log>
           deny from all
   </Directory>

   <FilesMatch ".+\.ph(p[345]?|t|tml)$">
           SetHandler "proxy:unix:/run/php/php7.2-fpm.cdnmin.sock|fcgi://localhost/"
   </FilesMatch>


  </VirtualHost>

在 fpm/pool.d 中:

   [cdnmin]
   user = cdnmin
   group = cdnmin
   listen = /run/php/php7.2-fpm.cdnmin.sock
   listen.owner = www-data
   listen.group = www-data
   listen.mode = 0666
   pm = dynamic
   pm.max_children = 5
   pm.start_servers = 2
   pm.min_spare_servers = 1
   pm.max_spare_servers = 3

注意:

   listen.owner = www-data
   listen.group = www-data
   listen.mode = 0666

引用自:https://serverfault.com/questions/949098