web-dev-qa-db-ja.com

nginx 403 Forbidden Error hosting in User Home Directory

ローカルマシンのUbuntu 12.04にnginx 1.1.19をインストールし、ユーザーディレクティブを変更する以外はデフォルトの/etc/nginx/nginx.confを保持しました。

/etc/nginx/nginx.conf

user nginx www-data;
worker_processes 4;
pid /var/run/nginx.pid;
...

ユーザーディレクトリのWebルートで簡単な静的サイトを機能させたい(ユーザー名が 'ubuntu'だとしましょう)。これが私のテストサイトの設定です。

/ etc/nginx/sites-available/test-site

server {
    #listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    root /home;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    }

}

これで明らかにすべてのファイルがWebルートに配置されるため、これを実際のサーバーに配置しませんが、これは私のポイントを示しています。 /home/index.html(ubuntuユーザーフォルダー内ではない)に単純なWebページを作成すると、http://localhost/にあるページにアクセスできます

これはうまくいきます。次に、ユーザールートごとにWebルートをINSIDEに置きます。/etc/nginx/sites-available/test-siteで、ルートディレクティブを `root/home/ubuntu ;.に変更します。 test-siteへのシンボリックリンクを再作成し、/ home/index.htmlを/home/ubuntu/index.htmlに移動して、nginxサーバーを停止して起動します。今、403 Forbiddenエラーが出ます。

私の最初の疑いは、これが許可の問題だったということです。ただし、ls -al index.htmlを実行すると、

-rw-r--r--  1 nginx   www-data   183 Aug 12 13:13 index.html

どっちがいい? chmod 777 /home/ubuntu/index.htmlを実行して、権限が

-rwxrwxrwx 1 nginx www-data 183 Aug 12 13:13 index.html

助けにならない。 /etc/init.d/nginx configtestでもエラーは発生せず、/etc/のシンボリックリンクは確かです。

だから私はここに数時間滞在していて、自分のユーザーディレクトリの中で何がサービスを提供できないほど特別なのでしょうか? Ubuntuは最近、ホームディレクトリを暗号化しますか?それが問題でしょうか? EC2 Ubuntu 12.04インスタンスでもこの問題が発生します(ユーザーディレクトリがそこで暗号化されているかどうかわかりません)

8
dgh

デフォルトのユーザーホームディレクトリの権限

したがって、Ubuntu 12.04のユーザーホームディレクトリのデフォルトの権限は700のようです。nginxには、提供するファイルの読み取り権限と、ルートから提供されるファイルへのパスに沿った各親ディレクトリの実行権限が必要です。

次のコマンドを実行すると、ユーザーディレクトリにこれらの権限を付与できます。

chmod 701 user_home

また、多くのシステムのホームディレクトリのデフォルトの権限設定である755を使用することもできます。

Nginxが実行されているユーザー/グループ(nginx.confで定義されている)が、提供されるすべてのファイルに対する読み取り権限を持っている限り、Webルートのディレクトリ/ファイルは、www-dataユーザーまたは通常の個人ユーザーに属することができます。すべてのWebルートディレクトリに対する実行権限。

私は自分のWebルートのすべてのディレクトリを自分のユーザーアカウントが所有するように設定し、権限755を設定しました。また、Webルートから提供されるすべてのファイルを私のマシンのデフォルトであるため、権限664を設定しました。

権限番号を文字列表現に変換することに関する注意。

Ex. drwxr-x--x becomes 751.

最初の文字を無視します(ディレクトリの場合はd、ファイルの場合は-など)。残りの9文字は、非ダッシュ文字が1でダッシュが0である2成分のトリプレットを形成します。

So drwxr-x--x becomes rwxr-x--x 
becomes 111 101 001 
which is converted to a decimal 751

権限を扱っていたときに、これについて復習が必要でした。

13
dgh