Nginxはopen()“ /etc/nginx/conf.d/foo.conf”が失敗したと言います(13:権限が拒否されました)


11

ここに私が持っているものがありls -al /etc/nginxます:

total 52
drwxr-xr-x.  4 root root 4096 Jul 28 04:16 .
drwxr-xr-x. 78 root root 8192 Jul 28 03:37 ..
drwxr-xr-x.  2 root root   26 Jul 28 03:55 conf.d
drwxr-xr-x.  2 root root    6 May 10 09:21 default.d
-rw-r--r--.  1 root root 1034 May 10 09:21 fastcgi.conf
-rw-r--r--.  1 root root  964 May 10 09:21 fastcgi_params
-rw-r--r--.  1 root root 2837 May 10 09:21 koi-utf
-rw-r--r--.  1 root root 2223 May 10 09:21 koi-win
-rw-r--r--.  1 root root 3957 May 10 09:21 mime.types
-rw-r--r--.  1 root root 1033 Jul 28 03:43 nginx.conf
-rw-r--r--.  1 root root  596 May 10 09:21 scgi_params
-rw-r--r--.  1 root root  623 May 10 09:21 uwsgi_params
-rw-r--r--.  1 root root 3610 May 10 09:21 win-utf

これは私が/var/log/nginx/error.log後に見るものですsudo service nginx start

[emerg] 20360#0: open() "/etc/nginx/conf.d/foo.conf" failed
(13: Permission denied) in /etc/nginx/nginx.conf:33

これは私が持っているものですls -al /etc/nginx/conf.d/

$ ls -al /etc/nginx/conf.d/
total 8
drwxr-xr-x. 2 root root   26 Jul 28 03:55 .
drwxr-xr-x. 4 root root 4096 Jul 28 04:16 ..
-rw-r--r--. 1 root root  230 Jul 28 03:50 foo.conf

どうしましたか?


2
SELinuxは強制されますか?何がls -lZ表示されますか?setenforce 0それが機能するかどうかを試してみてください。
yaegashi

確かに、setenforce 0助けました。回答として提出してください。同意し​​ます
yegor256

回答:


19

permission denied不明な理由でファイルアクセスなどのエラーが発生する場合は、SELinuxに関連している可能性があります。特に、問題のファイル/ディレクトリに対してでdrwxr-xr-x.示されls -lているようなアクセス許可に続くピリオドが表示されている場合、それらに誤ったラベルが付けられ(で表示される可能性がありますls -Z)、問題が発生する可能性があります。

まず、を実行して、現在のSELinuxモードを確認する必要がありますgetenforce。と表示されている場合はEnforcing、をPermissive実行してモードを一時的にに設定し、setenforce 0アプリケーションが後で動作するかどうかを確認します。

起動時のSELinuxモードの設定、ファイルまたはディレクトリのラベルの変更、ポリシーの更新など、SELinuxに関するディストリビューションのガイドを参照して永続的な修正を行ってください。こちらがCentOSのハウツーです。


2

SElinux全体を変更することが常に正しい答えであるとは限りません。私はエキスパートではありませんが、ポートにアクセスできない場合のファイアウォールの無効化と比較します。

他の簡単な解決策は、特にファイルがどこからコピーされた場合でも、ファイルの「SEコンテキストを復元」することです。

詳細については、https://www.thegeekstuff.com/2017/05/restorecon-examples/を参照してください。

これらは、SElinuxを無効にする前に試す価値のあるコマンドです

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*

このコマンドは私に与えるFull path required for exclude: net:[...].
ナキロン

0

selinuxを無効にするよりも良い方法は、コマンドを使用することです

semanage permissive -a httpd_t

これにより、selinuxを完全に無効にすることなく、toe nginxサービスを渡すことができます。

https://www.nginx.com/blog/using-nginx-plus-with-selinux/の詳細情報

ただし、私にとってはcommand chcon -v --type=httpd_sys_content_t /etc/nginx/*、httpd_tを除外する必要なく、適切に機能しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.