Nginx

Nginx 無權訪問具有相同所有權的文件

  • January 13, 2016

我剛剛在 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

nginx 使用者無法遍歷文件系統以到達您放置站點的文件夾。使用者必須對文件夾具有執行 (+x) 權限才能遍歷它。從你的權限資訊來看drwx------ lamnk users lmank,只有目錄的擁有者才有對該文件夾的讀、寫和執行的權限。因此,除非以該使用者身份執行,否則 nginx 無法訪問該文件夾或其任何子文件夾。

您應該授予對 /home/lamnk 的執行權限,chmod og+x /home/lamnk以便允許您以外的使用者遍歷該文件夾。沒有讀取權限,他們仍然無法列出或讀取該文件夾的內容,並且沒有寫入權限,他們無法對內容進行任何更改;所以這沒有安全風險,如果你想讓你的主目錄的子文件夾對其他使用者可見,例如 nginx 使用者,這是必要的。您希望在該文件夾上看到的遮罩是drwx--x--x.

引用自:https://serverfault.com/questions/748561