PHP-FPM crea archivos como root cuando se configura como www-data

PHP-FPM crea archivos como root cuando se configura como www-data

En una aplicación Docker de contenedores múltiples implementada, docker-composetengo un contenedor creado a partir de Alpine que ejecuta PHP-FPM. Ese contenedor se utiliza tanto para proporcionar PHP al contenedor Nginx como también para ejecutar scripts PHP.en el contenedordesde un comando CLIen el anfitrión. Los archivos creados por PHP cuando se ejecutan desde comandos CLI en el host son propiedad de root(UID 0) y tienen el rootgrupo (GID 0), aunque FPM está configurado para usar el usuario www-data(UID 1000) y el grupo www-data(GID 1000).

Aquí están las partes relevantes del Dockerfile:

FROM php:7.4-fpm-alpine
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN apk --no-cache add shadow && usermod -u 1000 www-data && groupmod -g 1000 www-data
RUN chown -R www-data:www-data /var/www/html

Aquí está la configuración:

$ docker-compose exec php grep -E "user|group" /usr/local/etc/php-fpm.d/www.conf
user = www-data
group = www-data

$ docker-compose exec php grep www-data /etc/passwd
www-data:x:1000:1000:Linux User,,,:/home/www-data:/sbin/nologin

Y aquí hay una demostración del problema fino:

$ docker-compose exec php ./artisan make:model Foo -m
Model created successfully.
Created Migration: 2020_09_25_051836_create_foos_table

$ docker-compose exec php ls -ln /var/www/html/database/migrations/2020_09_25_051836_create_foos_table.php
-rw-r--r--    1 0        0              571 Sep 25 05:18 /var/www/html/database/migrations/2020_09_25_051836_create_foos_table.php

También intenté anteponer el comando de ejecución env UID=1000 GID=1000como se sugiere en algunos foros, sin embargo, eso no tuvo ningún efecto. Pensando que tal vez el intérprete CLI ( /usr/local/bin/php) podría no usar FPM detrás de escena, intenté verificar la configuración de PHP que pudiera ser relevante, pero no encontré ninguna:

$ docker-compose exec php grep -rvE "^; " /etc/php7/ | grep "user\|group"
/etc/php7/php.ini:;user_ini.filename = ".user.ini"
/etc/php7/php.ini:;user_ini.filename =
/etc/php7/php.ini:;user_ini.cache_ttl = 300
/etc/php7/php.ini:;ignore_user_abort = On
/etc/php7/php.ini:;syslog.facility = user
/etc/php7/php.ini:user_dir =
/etc/php7/php.ini:;user_agent="PHP"
/etc/php7/php.ini:;odbc.default_user  =  Not yet implemented
/etc/php7/php.ini:;ibase.default_user =
/etc/php7/php.ini:mysqli.default_user =

¿Cómo puedo configurar PHP para escribir archivos como usuario www-data, es decir, UID 1000?

Respuesta1

Puede utilizar "usuario" en el archivo yml de redacción de la ventana acoplable y especificar el ID de usuario: ID de grupo.

user: "1000:1000"

información relacionada