Nginx sagt, open () "/etc/nginx/conf.d/foo.conf" sei fehlgeschlagen (13: Berechtigung verweigert)


11

Folgendes habe ich in 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

Das sehe ich /var/log/nginx/error.logdanach sudo service nginx start:

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

Das habe ich in 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

Was ist los?


2
SELinux durchgesetzt? Was ls -lZzeigt? Versuchen Sie zu setenforce 0sehen, ob es funktioniert.
Yaegashi

In der Tat setenforce 0geholfen. Bitte senden Sie es als Antwort, ich werde es akzeptieren
yegor256

Antworten:


19

Wenn Sie permission deniedaus unbekannten Gründen Fehler beim Dateizugriff usw. erhalten, kann dies mit SELinux zusammenhängen. Insbesondere wenn nach den Berechtigungen drwxr-xr-x., die ls -lfür die betreffende Datei / das betreffende Verzeichnis angezeigt werden, ein Zeitraum angezeigt wird , können diese falsch beschriftet sein (Sie können dies anhand von sehen)ls -Z ) und das Problem verursachen.

Sie sollten zuerst den aktuellen SELinux-Modus überprüfen, indem Sie ihn ausführen getenforce. Wenn dies der Fall ist Enforcing, stellen Sie den Modus vorübergehend Permissivedurch Ausführen auf einsetenforce 0 , und prüfen Sie, ob Ihre Anwendung anschließend funktioniert.

Informationen zur dauerhaften Korrektur finden Sie im Handbuch Ihrer Distribution zu SELinux, einschließlich der Einstellung des SELinux-Modus beim Start, der Neukennzeichnung von Dateien oder Verzeichnissen, der Aktualisierung von Richtlinien usw. Hier finden Sie eine Anleitung für CentOS .


2

Das Ändern von ganz SElinux ist nicht immer die richtige Antwort. Ich bin kein Experte, aber ich würde es mit dem Deaktivieren der Firewall vergleichen, wenn auf einen Port nicht zugegriffen werden kann.

Eine andere schnelle Lösung könnte darin bestehen, den SE-Kontext von Dateien wiederherzustellen, insbesondere wenn diese von irgendwoher kopiert werden.

Weitere Informationen finden Sie unter https://www.thegeekstuff.com/2017/05/restorecon-examples/ .

Dies sind Befehle, die Sie ausprobieren sollten, bevor Sie SElinux deaktivieren

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

0

Ein besserer Weg als das Deaktivieren von Selinux ist die Verwendung des Befehls

semanage permissive -a httpd_t

Dadurch kann der Zehen-Nginx-Dienst bestanden werden, ohne Selinux vollständig zu deaktivieren

Weitere Informationen unter https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Allerdings command chcon -v --type=httpd_sys_content_t /etc/nginx/*funktionierte für mich das und es funktionierte einwandfrei, ohne httpd_t ausnehmen zu müssen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.