我刚刚在 Archlinux 机器上安装了 nginx 并遇到了这个问题:
Nginx 配置为运行“nginx”,我添加的新用户/组,位于/etc/nginx/nginx.conf
:
user nginx nginx;
再次检查:
$ ps aux | grep nginx
nginx 9678 0.0 0.5 28472 2856 ? S 17:37 0:00 nginx: worker process
nginx 9679 0.0 0.5 28472 2856 ? S 17:37 0:00 nginx: worker process
root 31912 0.0 0.6 28084 3364 ? Ss 17:24 0:00 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;
服务器的根目录位于:
location / {
root /home/lamnk/sites/host.com;
index index.html index.htm;
}
并将文件所有者设置为nginx也:
$ ls -la /home/lamnk/sites/host.com
total 12
drwxr-xr-x 2 lamnk http 4096 Jan 12 09:37 .
drwxr-xr-x 3 lamnk users 4096 Jan 12 09:36 ..
-rw-r--r-- 1 nginx nginx 21 Jan 12 09:37 index.html
当我访问 时host.com
,出现了 403 禁止错误。在 中error.log
:
2016/01/12 17:28:23 [error] 31914#0: *2 open() "/home/lamnk/sites/host.com/index.html" failed (13: Permission denied), client: 171.233.242.40, server: host.com, request: "GET /index.html HTTP/1.1", host: "host.com"
但是当我将 nginx 更改为以我自己的用户名运行时lamnk
,nginx 可以正确返回内容,而无需对文件权限进行任何其他更改。这是怎么回事?
编辑:父目录的权限:
$ namei -l /home/lamnk/sites/host.com
f: /home/lamnk/sites/host.com
drwxr-xr-x root root /
drwxr-xr-x root root home
drwx------ lamnk users lamnk
drwxr-xr-x lamnk users sites
drwxr-xr-x lamnk http host.com
答案1
nginx 用户无法遍历文件系统以到达您放置站点的文件夹。用户必须对文件夹具有执行 (+x) 权限才能遍历它。从您的权限信息来看,drwx------ lamnk users lmank
显示只有目录的所有者才有权读取、写入和执行该文件夹。因此,除非以该用户身份运行,否则 nginx 无法访问该文件夹或其任何子文件夹。
您应该授予 /home/lamnk 的执行权限,chmod og+x /home/lamnk
以便除您之外的其他用户可以遍历该文件夹。如果没有读取权限,他们仍然无法列出或读取该文件夹的内容,如果没有写入权限,他们无法对内容进行任何更改;因此,这样做没有安全风险,如果您希望主目录的子文件夹对其他用户(例如 nginx 用户)可见,这是必要的。您希望在该文件夹中看到的掩码是drwx--x--x
。