php-fpm no se ejecuta según lo especificado por el usuario en el grupo

php-fpm no se ejecuta según lo especificado por el usuario en el grupo

Tengo un servidor web Ubuntu18.04 con nginx y php-fpm (7.2) instalados.

Hay 6 grupos, cada uno con su propio usuario y grupo:

/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

Cada sitio ejecuta una aplicación laravel, y el directorio de almacenamiento se puede escribir en grupo:

/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 se conecta a través del puerto TCP:

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;
    }
}

Con esta configuración obtengo

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

Cuando ejecuto chmod a+w en el directorio de almacenamiento, funciona.

También ejecuté ps -ef |grep php:

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 

Respuesta1

Sospecho que está ejecutando el "proceso maestro" como usuario raíz, pero para cada uno de los grupos ejecuta los procesos "de trabajo" como el usuario especificado. Esto se ve respaldado por el hecho de que tuvo que modificar el directorio de registros para que funcionara.

Un paso de solución de problemas que podría tomar es hacer que uno de los sitios escriba un archivo /tmp/testy luego verifique a qué usuario pertenece.

También puede escribir un bucle que duerma durante un par de minutos dentro de uno de los grupos y luego ejecutar su ps -ef | grep phpcomando para ver si el "proceso maestro" ha generado un proceso como el usuario que espera.

información relacionada