第一次使用 CloudLinux 时,我偶然发现了一些奇怪的事情(至少对我来说)。我是一个长期的 Ubuntu 用户,但我仍然认为自己是新手。
我多次在 Ubuntu 服务器上安装了带有 PHP-FPM 的 Nginx。我通常的方法是设置一个用户并www
在用户的主目录中创建一个目录。我会将 PHP-FPM 池配置用户和组设置为新创建的用户,并将 Nginx VirtualHost 指向用户主目录,并将文档根目录指向该www
文件夹的某个位置。
对于我来说,这个在 Ubuntu 上运行良好很长一段时间了。
上周,尝试在 CloudLinux(据我所知,它是某种 CentOS 发行版)上进行相同的设置。
结果完全不同。使用 Nginx 执行 PHP 文件时我没有遇到任何问题,但我发现 Nginx 无法提供静态文件(或其他文件,PHP-FPM 无法处理)。快速进行一些调试后,很明显用户nginx
没有足够的权限读取该/home/user/www
文件夹。对我来说,快速修复方法是将 移动到www
,/var/www/sitename
更新 Nginx 中的文档根目录,然后我就可以继续了。
这让我开始思考实际的区别是什么。当这种方法在其他发行版上不起作用时,我在 Ubuntu 上的方法是否合理(即安全)?
为什么 Nginx 用户可以毫无问题地在 Ubuntu 上读取我的用户主目录的内容,但在 CloudLinux 上却不行?
答案1
如果您希望~user/www
某些进程可以读取,请确保具有~user/www
-permissions x
(对于从根目录到目标目录的所有目录)。这x
仅允许进入目录,而不允许读取目录。
因此,要读取目标目录,还需添加r
权限(w
-permission 允许创建/删除文件)。如果和进程的组~user/www
无法轻松匹配,您可能希望使用 ACL(访问控制列表)。有关详细信息,请参阅getfacl
和setfacl
命令。
请注意,这是针对包含目录的;不要忘记也为实际文件设置权限。