Nginx dit que open () «/etc/nginx/conf.d/foo.conf» a échoué (13: autorisation refusée)

11

Voici ce que j'ai dans 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

Voici ce que je vois /var/log/nginx/error.logaprès sudo service nginx start:

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

C'est ce que j'ai dans 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

Qu'est-ce qui ne va pas?

yegor256
la source
2
SELinux appliqué? Que ls -lZmontre-t-on? Essayez de setenforce 0voir si cela fonctionne.
yaegashi
En effet, setenforce 0aidé. S'il vous plaît, soumettez-le comme réponse, je l'accepterai
yegor256

Réponses:

19

Lorsque vous obtenez des permission deniederreurs sur l'accès aux fichiers, etc. pour une raison inconnue, cela peut être lié à SELinux. Surtout lorsque vous voyez une période suivant les autorisations comme drwxr-xr-x.indiqué par ls -lpour le fichier / dir en question, elles peuvent être mal étiquetées (vous pouvez le voir par ls -Z) et provoquer le problème.

Vous devez d'abord vérifier le mode SELinux actuel en exécutant getenforce. Si c'est le cas Enforcing, définissez temporairement le mode sur Permissiveen exécutant setenforce 0et voyez si votre application fonctionne par la suite.

Veuillez consulter le guide de votre distribution sur SELinux pour un correctif permanent, y compris la définition du mode SELinux au démarrage, le réétiquetage des fichiers ou des répertoires, la mise à jour des politiques, etc. Voici le Howto pour CentOS .

yaegashi
la source
2

Modifier tout SElinux n'est pas toujours la bonne réponse. Je ne suis pas un expert mais je le comparerais avec la désactivation du pare-feu si un port n'est pas accessible.

Une autre solution rapide pourrait être de "restaurer le contexte SE" des fichiers, surtout si ceux-ci sont copiés de quelque part.

Voir https://www.thegeekstuff.com/2017/05/restorecon-examples/ pour plus de détails.

Ce sont des commandes à essayer avant de désactiver SElinux

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*
Lauri
la source
Cette commande me donneFull path required for exclude: net:[...].
Nakilon
0

Une meilleure façon que de désactiver selinux est d'utiliser la commande

semanage permissive -a httpd_t

Cela permettra au service toe nginx de passer sans désactiver complètement selinux

Plus d'informations sur https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Cependant, pour moi, exécuter le command chcon -v --type=httpd_sys_content_t /etc/nginx/*et cela a fonctionné correctement sans avoir à excuser httpd_t

Cyber ​​Axe
la source