Nginx 无权访问具有相同所有权的文件

Lam*_*mnk 6 nginx chmod arch-linux file-permissions http-status-code-403

我刚刚在 Archlinux 机器上安装了 nginx 并遇到了这个问题:

Nginx 被配置为作为"nginx"运行,这是我添加的一个新用户/组,在/etc/nginx/nginx.conf

user nginx nginx;
Run Code Online (Sandbox Code Playgroud)

对于双重检查:

$ 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;
Run Code Online (Sandbox Code Playgroud)

服务器的根目录位于:

    location / {
            root   /home/lamnk/sites/host.com;
            index  index.html index.htm;
    }
Run Code Online (Sandbox Code Playgroud)

并且文件的所有者也设置为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
Run Code Online (Sandbox Code Playgroud)

当我转到 时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"
Run Code Online (Sandbox Code Playgroud)

但是当我将 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
Run Code Online (Sandbox Code Playgroud)

Car*_*cer 14

nginx 用户无法遍历文件系统以到达您放置站点的文件夹。用户必须对文件夹具有执行 (+x) 权限才能遍历它。从你的权限信息来看drwx------ lamnk users lmank,只有目录的拥有者才有对该文件夹的读、写和执行权限。因此,除非以该用户身份运行,否则 nginx 无法访问该文件夹或其任何子文件夹。

您应该授予对 /home/lamnk 的执行权限,chmod og+x /home/lamnk以便允许您以外的用户遍历该文件夹。没有读取权限,他们仍然无法列出或读取该文件夹的内容,没有写入权限,他们无法对内容进行任何更改;所以这没有安全风险,如果你想让你的主目录的子文件夹对其他用户可见,这是必要的,比如 nginx 用户。您希望在该文件夹上看到的掩码是drwx--x--x.

  • 只允许用户 lamnk 进入您的主目录。您必须确保允许 nginx 读取和执行 /home/lank (2认同)