Nginx mówi, że open () „/etc/nginx/conf.d/foo.conf” nie powiodło się (13: Odmowa uprawnień)

11

Oto co mam w 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

Oto co widzę /var/log/nginx/error.logpo sudo service nginx start:

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

Oto co mam w 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

Co jest nie tak?

yegor256
źródło
2
Wymuszone SELinux? Co ls -lZpokazuje Spróbuj setenforce 0i zobacz, czy to działa.
yaegashi
Rzeczywiście setenforce 0pomógł. Prześlij go jako odpowiedź, zaakceptuję
yegor256

Odpowiedzi:

19

Gdy otrzymujesz permission deniedbłędy w dostępie do pliku itp. Z nieznanego powodu, może to być związane z SELinux. Zwłaszcza, gdy widzisz kropkę po uprawnieniach, takich jak drwxr-xr-x.pokazane przez ls -ldla danego pliku / katalogu, mogą one zostać błędnie oznaczone (możesz to zobaczyć ls -Z) i spowodować problem.

Najpierw powinieneś sprawdzić bieżący tryb SELinux, uruchamiając getenforce. Jeśli to mówi Enforcing, tymczasowo ustaw tryb na Permissiveuruchamiając setenforce 0i sprawdź, czy aplikacja działa później.

Aby uzyskać trwałą poprawkę, zapoznaj się z instrukcją dystrybucji na temat SELinuksa, w tym ustawieniem trybu SELinux przy uruchamianiu, ponownym oznakowaniem plików lub katalogów, aktualizacją zasad itp. Oto Howto for CentOS .

yaegashi
źródło
2

Zmiana całego SElinux nie zawsze jest właściwą odpowiedzią. Nie jestem ekspertem, ale porównałbym to do wyłączania zapory, jeśli port jest niedostępny.

Innym szybkim rozwiązaniem może być „przywrócenie kontekstu SE” plików, szczególnie jeśli są one gdzieś kopiowane.

Zobacz https://www.thegeekstuff.com/2017/05/restorecon-examples/, aby uzyskać więcej informacji.

Są to polecenia, które warto wypróbować przed wyłączeniem SElinux

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*
Lauri
źródło
To polecenie daje miFull path required for exclude: net:[...].
Nakilon
0

Lepszym sposobem niż wyłączenie selinux jest użycie polecenia

semanage permissive -a httpd_t

Umożliwi to przejście usługi toe nginx bez całkowitego wyłączenia selinux

Więcej informacji na https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Jednak dla mnie uruchomienie command chcon -v --type=httpd_sys_content_t /etc/nginx/*i działało poprawnie bez potrzeby wyłączania httpd_t

Cyber ​​Axe
źródło