使用PHP-FPM的nginx根目录的Linux权限/所有者

3

我的nginx的根目录是/usr/share/nginx/html,所有权归root:root所有,但我需要使用我的用户mark添加/编辑/删除文件。此外,我正在使用PHP和fastcgi(php-fpm),我需要将文件上传到特定目录/usr/share/nginx/html/userfiles中。 我当前的配置如下:

sudo groupadd webdev;
sudo usermod -a -G webdev mark;
sudo chown root:webdev /usr/share/nginx/html;
sudo chmod 2775 /usr/share/nginx/html -R;
sudo chgrp -R www-data /usr/share/nginx/html/userfiles;

我发现关于上传文件有一些问题(它们在/usr/share/nginx/html/userfiles中被正确创建,但我的用户mark无法打开/编辑/删除这些文件)。我该如何解决?对于更好的配置,有什么建议吗?


sudo groupadd webupload && sudo usermod -a -G webupload www-data && sudo usermod -a -G webupload mark && sudo chgrp -R webupload /usr/share/nginx/html/userfiles; - Siguza
@Siguza 谢谢你,但是由于权限被拒绝,它无法工作,正如我在 PHP 日志文件中所看到的... - Mark
1个回答

2

通过共享一个公共组来分享文件访问权限是正确的,但是您创建的文件和目录必须属于该组,并且对该组进行读/写操作。

我假设 PHP 创建的文件将属于 www-data 组,但可能没有组写入权限,除非您在 /etc/init/php-fpm.conf 中更改 umask。添加一行:

umask 0002

如果您的id在其组中包含www-data,则可以编辑该文件。
如果您创建一个文件,它将不会在www-data组中,而是可能是您自己的组mark。因此,如果您希望PHP即www-data能够编辑该文件,您需要通过对称性执行usermod -a -G mark www-data,并确保在创建文件时将其设置为组读/写(umask 2和检查或chmod g+w)。
确保目录userfiles对组www-data具有rwx权限,或者chmod g+rwx它。

谢谢,您有关于我的配置改进安全或其他方面的建议吗? - Mark
上传文件时,请确保从提供的文件名中删除除字母数字以外的所有字符。永远不要使它们可执行。检查由php强加的最大上传文件大小限制。 - meuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接