Php-Fpm
Suexec/Apache 使用者不是 php-fpm ‘user’
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