Nginx 403はすべてのファイルで禁止されています


191

CentOS 5のボックスにnginxをPHP-FPMとともにインストールしましたが、PHPかどうかに関係なく、私のファイルにサービスを提供するのに苦労しています。

Nginxはwww-data:www-dataとして実行されており、デフォルトの「EPELでnginxへようこそ」サイト(root:rootが所有し、644の権限を持つ)は正常に読み込まれます。

nginx構成ファイルには/etc/nginx/sites-enabled/*.confの includeディレクティブがあり、構成ファイルexample.com.confがあるため、次のようになります

server {
 listen 80;

 Virtual Host Name
 server_name www.example.com example.com;


 location / {
   root /home/demo/sites/example.com/public_html;
   index index.php index.htm index.html;
 }

 location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  PATH_INFO $fastcgi_script_name;
  fastcgi_param  SCRIPT_FILENAME  /home/demo/sites/example.com/public_html$fastcgi_script_name;
  include        fastcgi_params;
 }
}

public_htmlが2777ファイル権限を持つwww-data:www-dataに所有されているにもかかわらず、このサイトはコンテンツを提供できません-

 [error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"

nginxから403を取得しているユーザーがいる他の多くの投稿を見つけましたが、Ruby / Passengerを使用したより複雑な設定(以前は実際に成功しました)が関係しているか、上流のPHPの場合にのみエラーが発生しています-FPMが関係しているため、ほとんど役に立たないようです。

ここでばかげたことをしましたか?


この回答を確認してくださいstackoverflow.com/questions/16808813/…–
sandes

回答:


333

見過ごされがちな権限要件の1つは、ユーザーがファイルにアクセスするには、ファイルのすべての親ディレクトリにx権限が必要であることです。/、/ home、/ home / demoなどのアクセス権でwww-data xアクセスを確認します。私の推測では、/ homeはおそらく770であり、www-dataはそれをchdirしてサブディレクトリに到達することはできません。そうである場合は、chmod o + x / home(または要求を拒否している任意のディレクトリ)を試してください。

編集:パス上のすべての権限を簡単に表示するには、次を使用できます namei -om /path/to/check


6
こっちも一緒。CentOS 6をインストールすると、/ home / user dirsはデフォルトで700に設定されます。
jjt

2
この男もそれについて話します:(chmod -4 +x /mypath私のために働いた)nginxlibrary.com/403-forbidden-error
Peter Ehrlich

1
この動作が、すべての親ディレクトリに「x」権限を必要としないapacheとは異なる理由を誰かが説明できますか?
JoshuaDavid 2014年

3
違いはありません。apacheが親ディレクトリのx権限も必要としない唯一の理由は、それがrootとして実行されている場合です。
kolbyjack 2014年

最終的に、www-dataユーザーを個人ユーザーグループに追加し、chmod 710をルートユーザーフォルダーに追加しました。魅力のように働いた。(debianベースのディストリビューションの場合)
basicdays

298

permission denied親フォルダーのアクセス許可を確認しても引き続き表示される場合は、SELinuxがアクセスを制限している可能性があります。

SELinuxが実行されているかどうかを確認するには:

# getenforce

次の再起動までSELinuxを無効にするには:

# setenforce Permissive

Nginxを再起動し、問題が引き続き発生するかどうかを確認します。nginxがwwwディレクトリにサービスを提供できるようにするには(これをテストする前に、必ずSELinuxをオンに戻してください。つまり、setenforce Enforcing

# chcon -Rt httpd_sys_content_t /path/to/www

詳細については、ここで私の答えを参照してください


1
なぜnginxを起動したときにopen() "/usr/share/nginx/logs/xxxxxx.com-error_log" failed (13: Permission denied)、パーミッションをチェックしてrootとして起動されていることを確認した後で、なぜnginxが起動したのか理解できませんでした。これに遭遇し、SELinuxが有効になっていることがわかりました。無効にしたところ、問題なく動作しました。ありがとう!
ub3rst4r 2014年

1
ありがとう!自分のFPMソケットを所有しているユーザーのアクセス許可が拒否されるという問題があったのでusernginxからrootに変更することで修正できました。/var/nginx/nginx.confおそらく、この問題に遭遇した誰かを助けるでしょう。2番目の部分では、DataPsycheへのS / O。

11
これはCentOS 7のデフォルトの動作でもあります。
timss 2015

4
私はコメントした他の皆と一緒に。私は自分のコンピューターを窓から投げ出す準備ができていました。Nginxは適切に構成され、アクセス許可が適切に設定されている場合、私はすべてを777にするまで行っても、アクセス許可拒否エラーが発生しました。
DOfficial 2015年

2
Centos 7(SELinuxが有効)では、私にとって最も簡単な修正は setsebool httpd_read_user_content on(ホームディレクトリからホストされた静的ファイルの場合、chmodされて全世界で読み取り可能)-上記の@KapiteinWitbaardの方法の方が安全だと思いますが。
TimStaley

61

ユーザー設定を追加してこの問題を解決しました。

nginx.conf内

worker_processes 4;
user username;

Linuxのユーザー名で「ユーザー名」を変更します。


4
この答えは、受け入れられた答えよりもセキュリティに優れていると思います。ホームフォルダー(機密情報が含まれている可能性があります)のアクセス許可をいじる必要はありません。nginxを使用して開発を行っている場合、奇妙なファイルのアクセス許可をSCMにアップロードする必要がなくなります。
CamelBlues、2015年

ホームディレクトリに追加されたアクセス許可は実行され、読み取られないため、機密情報は(理論的には)明らかにされません(この場合、おそらく、上向きに再帰し、別のディレクトリ内の機密ファイルの場所を知っている悪意のあるPHPスクリプトに対して) www-dataにアクセスできます)。また、元の質問では、nginxは "www-data"として実行されていました。ここでの構成値は、必要に応じて既に設定されています。
アンガスアイルランド

2
ユーザーグループも追加する必要がありました:ユーザーusegroup。
Gabriel A. Zorrilla 2015

私にとってもうまくいきました(dirをnginx:nginxにchmoddingするのと同じように)。私はこの解決策を好むので、nginx以外のユーザーがドキュメントルートを所有できるようにします。これを指摘してくれたアンダーソンに感謝します。
kvdv 2015

私の日を救った。ちなみに、マシンに複数のユーザーがいて、各ユーザーが独自のWebサイトを持っている場合、どうすれば対処できますか?
psychok7

38

このエラーが発生したので、最終的に次のコマンドで解決しました。

restorecon -r /var/www/html

この問題は、ある場所から別の場所に何かを移動したときに発生します。移動したときに元のselinuxコンテキストが保持されるため、/ homeまたは/ tmpで何かをuntarすると、その場所に一致するselinuxコンテキストが与えられます。これを/ var / www / htmlにmvすると、それは/ tmpまたは/ homeに属していることを示すコンテキストを取得し、httpdはポリシーによってこれらのファイルへのアクセスを許可されません。

ファイルをmvではなくcpすると、selinuxコンテキストは、コピー元の場所ではなく、コピー先の場所に従って割り当てられます。restoreconを実行すると、コンテキストがデフォルトに戻り、修正されます。


1
@jsinaに感謝します。これは私に大いに役立ちました
Pankaj Garg

1
くそー、+ 1、私も。
jww

24

私はさまざまなケースを試しましたが、所有者がnginx(chown -R nginx:nginx "/var/www/myfolder")に設定されている場合にのみ、期待どおりに動作し始めました。


1
私のためにも働いた。これは、nginxがrootとして開始されたとしても、nginx.confファイルで指定されたユーザー「user nginx」の下でプロセスを生成するために発生するのではないかと思います。デフォルトでは。ユーザーをドキュメントルートを所有するユーザーに変更しても、アンダーソンの提案どおりに機能するはずです。
kvdv 2015

アンダーソンさん?番号!アンドロン;)
アンドロン、2015

アンドロンさん、お詫び申し上げます;)私は以前のコメントをもう編集できないようです...
kvdv

もちろん、問題ありません。今私はアンダーソンでした:)そして、いくつかのおとぎ話を書く必要があります...
Andron

1
これはセキュリティの問題ではありませんか?
gontard、

6

SELinuxを使用している場合は、次のように入力します。

sudo chcon -v -R --type=httpd_sys_content_t /path/to/www/

これにより、権限の問題が修正されます。


1

古い質問ですが、同じ問題がありました。上記のすべての答えを試しましたが、何もうまくいきませんでした。私にとってそれを修正したのは、ドメインを削除して、もう一度追加することでした。Pleskを使用していますが、ドメインがすでに存在していた後でNginxをインストールしました。

ただし、最初に/ var / www / backupsへのローカルバックアップを行いました。したがって、ファイルを簡単にコピーして戻すことができました。

奇妙な問題....


1

Plesk Onyx 17を使用して同じ問題が発生しました。権限などをいじる代わりに、解決策は、他のすべてのドメイン所有者(ユーザー)がいるpsaclnグループにnginxユーザーを追加することでした。

usermod -aG psacln nginx

これで、nginxは.htaccessまたはコンテンツを適切に表示するために必要なその他のファイルにアクセスする権限を持ちます。

一方、静的コンテンツを提供するために、Apacheがpsaservグループにあることも確認してください。

usermod -aG psaserv apache

そして、PleskでApacheとNginxの両方を再起動することを忘れないでください!(Ctrl-F5でページをリロードします)


これは正解でありusermod -aG username www-data、ほとんどのセットアップで発生する可能性があります。
ダリオザドロ

0

誤ってsetfaclコマンドを実行して、この問題のわずかな変種を探りました。私が走った:

sudo setfacl -m user:nginx:r /home/foo/bar

グループnginxへの追加を優先してこのルートを放棄しましたfooが、そのカスタムACLはnginxによるファイルへのアクセス試行を阻止していました。私は実行してそれをクリアしました:

sudo setfacl -b /home/foo/bar

そして、nginxはファイルにアクセスすることができました。



0

私は同じ問題に直面していましたが、上記の解決策は役に立ちませんでした。

したがって、多くの苦労の末、sestatusがすべてのポートをブロックするように強制するように設定され、それを寛容に設定することによってすべての問題が解決されることがわかりました。

sudo setenforce 0

これが私のような人に役立つことを願っています。


それで問題が解決した可能性がありますが、おめでとうございます!-それは少し悲しいです:-( stopdisablingselinux.comを参照してください-別の回避策を見つけることができますか?
Angus Ireland
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.