Nginx
Nginx 無權訪問具有相同所有權的文件
我剛剛在 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
.