Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php fpm由2个用户运行,导致权限问题_Php_Laravel_Ubuntu_Nginx - Fatal编程技术网

php fpm由2个用户运行,导致权限问题

php fpm由2个用户运行,导致权限问题,php,laravel,ubuntu,nginx,Php,Laravel,Ubuntu,Nginx,我的ps aux | grep php fpm输出 root 22583 0.0 0.3 447796 26580 ? Ss 15:00 0:00 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf) www-data 22605 0.0 0.7 1420740 58344 ? S 15:00 0:01 php-fpm: pool www www-data 22608 0.0

我的
ps aux | grep php fpm
输出

root     22583  0.0  0.3 447796 26580 ?        Ss   15:00   0:00 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
www-data 22605  0.0  0.7 1420740 58344 ?       S    15:00   0:01 php-fpm: pool www
www-data 22608  0.0  0.4 457224 40184 ?        S    15:00   0:00 php-fpm: pool www
ubuntu   23865  0.0  0.0  15184  1044 pts/1    S+   17:08   0:00 grep --color=auto php-fpm
正如您在最后一行中看到的,
php fpm
ubuntu
运行,而不是
www-data
(我使用nginx+php,其中nginx用户是
www-data
,我假设我的问题出在这里)。因此,在我的应用程序(基于Laravel)中,日志文件是代表
ubuntu
用户创建的。当应用程序正在运行其抛出权限被拒绝错误时。因为它无法读取日志文件

当我将日志文件加载到
www-data
时,它工作正常。但是每一个新的日志文件都是属于
ubuntu
用户的,然后我每天都要
chown
他们:(.我怎样才能改变
php fpm
的用户来解决权限问题

编辑:我还将
ubuntu
用户添加到
www-data
组中,但是
ubuntu
仍然无法编辑
www-data

您可以使用setfacl

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX /log/folder/laravel/project
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX /log/folder/laravel/project

请参阅symfony docs:

通常,您的web服务器用户应该是创建日志文件(www数据)的用户。Le日志文件应该可以由web服务器运行时的同一用户写入

我建议权限设置如下:

chmod-R 755存储器/

安装Laravel后,您可能需要配置一些权限。存储和引导/缓存目录中的目录应由web服务器写入,否则Laravel将不会运行

您还可以查看Laravel 5.8本地驱动程序的权限文档:


您还可以在各自的配置文件中更改php fpm和nginx用户和组。

在symfony中,我使用setfacl,可以帮助您吗?我试过了。但大多数情况下,当一个新的日志文件由ubuntu创建时,它的所有者是ubuntu。是的@Shobi,但www数据也可以写入它们。您不想要ubuntu拥有的文件吗?只有www数据?只要重新启动即可ed服务器。您的回答似乎暂时解决了这个问题,谢谢:)