用例:
我有两个用户nginx
,nodejs
我想运行一个 nginx 服务器来提供静态文件,这些文件是由 nodejs 用户(来自git pull
)创建的。
问题:
我注意到,当我第一次尝试时,nginx 日志中会出现“打开文件时权限被拒绝”的信息。我所做的就是将用户添加nginx
到nodejs
组(也是 nodejs 用户的组)。我通过运行(以 nginx 用户身份)确认 nginx 用户在这个组中groups
。
但是这仍然不起作用。因此我以nginx
用户身份登录并尝试访问包含它应该提供的资产的文件夹:
[nginx@m5465 home]$ cd nodejs
bash: cd: nodejs: Permission denied
文件夹权限:
问题:
我如何授予 nginx 用户对所需文件夹及其文件的读取权限(/home/nodejs/projectname/wwwroot/
)/我做错了什么?
答案1
[nginx@m5465 home]$ cd nodejs
bash: cd: nodejs: 权限被拒绝
从您的图像来看,nodejs 目录的权限是rwxr------
。为了能够遍历目录结构,进程需要具有x
(遍历)允许在某种程度上。您的组权限太严格。您需要x
在组级别添加到目录中,例如
chmod g+x nodejs.
您需要对 nginx 需要遍历的每个目录执行此操作。
由于您使用的是 CentOS 系统,因此您可能还遇到了 SELinux 问题。您可以通过查看 /var/log/audut/audit.log 查找拒绝消息来确认这一点。要确认 SELinux 是否导致问题,您可以暂时将其置于宽容模式。
setenforce 0
如果您的行动现在有效,则证明这一点,您需要进行适当的更改。这可能很简单,例如启用httpd_enable_homedirs
(但这可能会泄露您不想泄露的信息),也可能更复杂但更不公开。