Nginx dice que open () "/etc/nginx/conf.d/foo.conf" falló (13: Permiso denegado)

11

Esto es lo que tengo en 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

Esto es lo que veo /var/log/nginx/error.logdespué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

Esto es lo que tengo en 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

Que pasa

yegor256
fuente
2
SELinux forzado? ¿Qué ls -lZmuestra? Intenta setenforce 0ver si funciona.
yaegashi
De hecho, setenforce 0ayudó. Por favor, envíelo como respuesta, lo aceptaré
yegor256

Respuestas:

19

Cuando obtiene permission deniederrores en el acceso a archivos, etc. por razones desconocidas, puede estar relacionado con SELinux. Especialmente cuando ve un período después de los permisos como se drwxr-xr-x.muestra ls -lpara el archivo / directorio en cuestión, podrían estar mal etiquetados (puede verlo ls -Z) y causar el problema.

Primero debe verificar el modo SELinux actual ejecutando getenforce. Si dice Enforcing, configure temporalmente el modo Permissiveejecutando setenforce 0y vea si su aplicación funciona después.

Por favor, consulte la guía de su distribución en SELinux para solución permanente, incluyendo el ajuste del modo de SELinux en el arranque, volver a etiquetar los archivos o directorios, la actualización de las políticas, etc. Aquí está Howto para CentOS .

yaegashi
fuente
2

Alterar todo SElinux no siempre es la respuesta correcta. No soy un experto, pero lo compararía con la desactivación del firewall si no se puede acceder a un puerto.

Otra solución rápida podría ser "restaurar el contexto SE" de los archivos, especialmente si se copian de alguna parte.

Ver https://www.thegeekstuff.com/2017/05/restorecon-examples/ para más detalles.

Estos son comandos que vale la pena probar antes de deshabilitar SElinux

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*
Lauri
fuente
Este comando me daFull path required for exclude: net:[...].
Nakilon
0

Una mejor manera que deshabilitar selinux es usar el comando

semanage permissive -a httpd_t

Eso permitirá que el servicio toe nginx pase sin deshabilitar completamente selinux

Más información en https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Sin embargo, para mí ejecutar el command chcon -v --type=httpd_sys_content_t /etc/nginx/*y funcionó correctamente sin necesidad de superar httpd_t

Hacha cibernética
fuente