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 forbiddenエラーが発生しました。 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は、そのユーザーとして実行されない限り、そのフォルダーまたはそのサブフォルダーにアクセスできません。
自分以外のユーザーがフォルダを走査できるように、chmod og+x /home/lamnk
を使用して/ home/lamnkに実行権限を付与する必要があります。読み取り権限がなければ、そのフォルダーの内容を一覧表示したり読み取ったりすることはできません。また、書き込み権限がないと、内容を変更することもできません。したがって、これにはセキュリティ上のリスクはありません。また、nginxユーザーなどの他のユーザーに表示されるホームディレクトリのサブフォルダが必要な場合に必要です。そのフォルダーに表示されるマスクはdrwx--x--x
です。