php/nginx 的权限错误并且不使用 www-data

php/nginx 的权限错误并且不使用 www-data

-编辑-更好奇的是我chmod 777 /var/run/php-fastcgi/php-fastcgi.socket这是否有效。如果不是 www-data、php-www(也不是 root)那么哪个用户正在尝试访问套接字:|

-edit2- 我chown www-data:$FASTCGI_GROUP $SOCKET在下面脚本的末尾添加了 (就在 之后spawn-fcgi),这解决了问题,但我很困惑,www-data 在 php-www 组中。为什么它必须是所有者。我没有将 FASTCGI_USER 改回 www-data,因为这会违背目的(它会允许 PHP 文件以 www-data 的身份访问我的所有文件,而我不想这样做)

本质上我想做的是让 PHP 进程不是 www-data,这样如果它受到损害,其损害仅限于我拥有的极少数 PHP 站点。我所做的是创建用户 php-www 并将其组添加到 www-data。当我以 www-data 身份登录时,我可以访问 php-www 中的所有内容,但是 php-www 无法访问除我的 PHP 站点之外的任何内容。完美的。

我运行了 php+nginx。但如何改变它却给我带来了一个问题。我在 init.d 脚本中看到 www-data 提及,它更改了文件夹的所有权。没问题,我把它改成了 php-www。那不是问题。

问题出在spawn脚本上。

#!/bin/bash

FASTCGI_USER=php-www
FASTCGI_GROUP=php-www
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

用户/组行过去常说 www-data,但现在我将它们更改为 php-www。

我启动了 php-fastcgi 和 nginx。当我访问我的网站时,出现 502 bad gateway 错误。当我查看 nginx 日志时,我看到这一行

connect() to unix:/var/run/php-fastcgi/php-fastcgi.socket failed (13: Permission denied) while connecting to upstream

没有权限!?!为什么!?! www-data 确实有组 php-www,并且stat该文件夹和套接字显示所有者和组 php-www。我可以使用 bot php-www 和 www-data 访问 PHP 文件。为什么我会收到权限错误?我做错了什么?

如果你想看看我的流程

# ps aux | egrep "php|www"

节目

www-data   548  0.0  0.1   1908   492 ?        Ss   18:08   0:00 /usr/sbin/fcgiwrap
www-data   586  0.0  0.1   1908   488 ?        Ss   18:08   0:00 /usr/sbin/fcgiwrap
php-www   1611  0.0  1.9  19312  5020 ?        Ss   18:20   0:00 /usr/bin/php5-cgi
php-www   1612  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
php-www   1613  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
php-www   1614  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
php-www   1615  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
php-www   1616  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
php-www   1617  0.0  0.7  19312  1856 ?        S    18:20   0:00 /usr/bin/php5-cgi
www-data  1776  0.0  0.6   5428  1684 ?        S    18:27   0:00 nginx: worker process
php-www   1967  0.0  1.9  19312  5020 ?        Ss   18:40   0:00 /usr/bin/php5-cgi
php-www   1968  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
php-www   1969  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
php-www   1970  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
php-www   1971  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
php-www   1972  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
php-www   1973  0.0  0.7  19312  1856 ?        S    18:40   0:00 /usr/bin/php5-cgi
root      2110  0.0  0.2   3300   736 pts/1    S+   18:55   0:00 egrep php|www

答案1

该套接字可能不是组可读和可写的。

答案2

除了更改套接字权限之外,您还可以编辑 nginx 配置并更改user www-data为您自己的用户名

答案3

触摸 PHP CGI 套接字文件(创建一个空文件)。将其权限改为777,然后启动php-fastcgi

答案4

将此行添加到您要添加的每个用户会话中的 fpm 池配置文件中。

listen.mode = 0666

像这样/opt/php-5.6.3/etc/fpm.d/user1.conf

[user1]
listen.owner = user1
listen.group = user1
user = user1
group = user1
listen = /opt/php-5.6.3/sockets/user1.sock
listen.mode = 0666

这使得你的套接字可读。通过 chmod 更改套接字权限是一个临时解决方案。因为重新启动服务后,它会更改为之前的状态。

将其更改为您需要的任何内容。喜欢第0660章仅为组和所有者添加权限。但第0666章就可以了。

相关内容