web-dev-qa-db-ja.com

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

ここに私が持っているものがあります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.logSudo 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

どうしましたか?

11
yegor256

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

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

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

19
yaegashi

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

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

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

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

Sudo restorecon  /etc/nginx/conf.d/
Sudo restorecon  /etc/nginx/conf.d/*
2
Lauri

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を免除する必要なく、適切に機能しました

0
Cyber Axe