php-fpm wird nicht als im Pool angegebener Benutzer ausgeführt

php-fpm wird nicht als im Pool angegebener Benutzer ausgeführt

Ich habe einen Ubuntu18.04-Webserver mit nginx und php-fpm (7.2) installiert.

Es gibt 6 Pools, jeder mit seinem eigenen Benutzer und seiner eigenen Gruppe:

/etc/php/7.2/fpm# grep -r ^user * 
php.ini:user_dir =
pool.d/dev3.website.com.conf:user = dev3_app
pool.d/dev1.website.com.conf:user = dev1_app
pool.d/dev4.website.com.conf:user = dev4_app
pool.d/dev6.website.com.conf:user = dev6_app
pool.d/dev5.website.com.conf:user = dev5_app
pool.d/dev2.website.com.conf:user = dev2_app

/etc/php/7.2/fpm# grep -r ^group * 
pool.d/dev3.website.com.conf:group = dev3_app
pool.d/dev1.website.com.conf:group = dev1_app
pool.d/dev4.website.com.conf:group = dev4_app
pool.d/dev6.website.com.conf:group = dev6_app
pool.d/dev5.website.com.conf:group = dev5_app
pool.d/dev2.website.com.conf:group = dev2_app

Auf jeder Site wird eine Laravel-App ausgeführt, wobei das Speicherverzeichnis für alle Gruppen beschreibbar gemacht wurde:

/var/www/dev3.website.com# ls -la
total 2236
drwxr-xr-x  20 root dev3_app    4096 Jul 17 21:39 .
drwxr-xr-x   9 root root        4096 Jul 17 21:33 ..
...
drwxrwxr-x   7 root dev3_app    4096 Jul 17 21:29 storage

nginx stellt eine Verbindung über den TCP-Port her:

server {
    listen         80;
    server_name    dev3.website.com;

    root /var/www/dev3.website.com/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_pass 127.0.0.1:9001;
        fastcgi_index index.php;

        # include the fastcgi_param setting
        include fastcgi_params;

        # SCRIPT_FILENAME parameter is used for PHP FPM determining
        #  the script name. If it is not set in fastcgi_params file,
        # i.e. /etc/nginx/fastcgi_params or in the parent contexts,
        # please comment off following line:
        fastcgi_param  SCRIPT_FILENAME   
        $document_root$fastcgi_script_name;
    }
}

Mit dieser Konfiguration bekomme ich

The stream or file "/var/www/dev3.website.com/storage/logs/laravel-2019-07-17.log" could not be opened: failed to open stream: Permission denied

Wenn ich chmod a+w im Speicherverzeichnis ausführe, funktioniert es.

Ich habe auch ps -ef |grep php ausgeführt:

root      2468     1  0 00:53 ?        00:00:05 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
root     11897 10961  0 22:12 pts/0    00:00:00 grep --color=auto php 

Antwort1

Ich vermute, dass der „Masterprozess“ als Root-Benutzer ausgeführt wird, aber für jeden der Pools die „Worker“-Prozesse als angegebener Benutzer ausgeführt werden. Dies wird noch dadurch unterstützt, dass Sie das Protokollverzeichnis ändern mussten, damit es funktioniert.

Zur Fehlerbehebung können Sie beispielsweise eine der Sites veranlassen, eine Datei zu schreiben /tmp/testund anschließend zu prüfen, welchem ​​Benutzer sie gehört.

Sie können auch eine Schleife schreiben, die in einem der Pools einige Minuten schläft, und dann Ihren ps -ef | grep phpBefehl ausführen, um zu sehen, ob der „Masterprozess“ einen Prozess als der von Ihnen erwartete Benutzer erzeugt hat.

verwandte Informationen