Nginx mengatakan open () “/etc/nginx/conf.d/foo.conf” gagal (13: Izin ditolak)

11

Inilah yang saya miliki 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

Inilah yang saya lihat /var/log/nginx/error.logsetelahnya sudo service nginx start:

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

Inilah yang saya miliki 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

Apa yang salah?

yegor256
sumber
2
SELinux diberlakukan? Apa yang ls -lZditunjukkan? Coba setenforce 0dan lihat apakah itu berhasil.
yaegashi
Memang setenforce 0membantu. Tolong, kirimkan sebagai jawaban, saya akan menerimanya
yegor256

Jawaban:

19

Ketika Anda mendapatkan permission deniedkesalahan pada akses file dll. Karena alasan yang tidak diketahui, itu mungkin terkait dengan SELinux. Terutama ketika Anda melihat periode berikut izin seperti yang drwxr-xr-x.ditunjukkan oleh ls -luntuk file / dir dalam pertanyaan, mereka bisa salah diberi label (Anda dapat melihatnya dengan ls -Z) dan menyebabkan masalah.

Anda harus terlebih dahulu memeriksa mode SELinux saat ini dengan menjalankan getenforce. Jika dikatakan Enforcing, setel sementara mode ke Permissivedengan menjalankan setenforce 0, dan lihat apakah aplikasi Anda bekerja sesudahnya.

Silakan baca panduan distribusi Anda di SELinux untuk perbaikan permanen, termasuk mengatur mode SELinux saat start up, memberi label ulang file atau direktori, memperbarui kebijakan, dll. Berikut Howto for CentOS .

yaegashi
sumber
2

Mengubah seluruh SElinux tidak selalu merupakan jawaban yang tepat. Saya bukan ahli tetapi saya akan membandingkannya dengan menonaktifkan firewall jika port tidak dapat diakses.

Solusi cepat lainnya bisa dengan "mengembalikan konteks SE" file, terutama jika mereka disalin dari suatu tempat.

Lihat https://www.thegeekstuff.com/2017/05/restorecon-examples/ untuk rincian lebih lanjut.

Ini adalah perintah yang patut dicoba sebelum menonaktifkan SElinux

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*
Lauri
sumber
Perintah ini memberi sayaFull path required for exclude: net:[...].
Nakilon
0

Cara yang lebih baik daripada menonaktifkan selinux adalah dengan menggunakan perintah

semanage permissive -a httpd_t

Itu akan memungkinkan layanan toe nginx untuk lewat tanpa sepenuhnya menonaktifkan selinux

Info lebih lanjut tentang https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Namun bagi saya menjalankan command chcon -v --type=httpd_sys_content_t /etc/nginx/*dan itu berfungsi dengan baik tanpa perlu mengecualikan httpd_t

Kapak Cyber
sumber