Suexec/Apache 用户不是 php-fpm“用户”

Suexec/Apache 用户不是 php-fpm“用户”

Suexec/Apache 用户不是 php-fpm“用户”。

在我的 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()' 返回 '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()不一样。

我遗漏了什么?

答案1

我使用的是 ubuntu 18.04,它不支持 fastcgi。Bionic 使用 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

相关内容