(13: Permiso denegado) mientras se conecta al canal ascendente:[nginx]

Resuelto Mulagala asked hace 10 años • 17 respuestas

Estoy trabajando en la configuración del proyecto Django con Nginx y Gunicorn.

Mientras accedo a mi puerto gunicorn mysite.wsgi:application --bind=127.0.0.1:8001en el servidor Nginx, aparece el siguiente error en mi archivo de registro de errores:

30/05/2014 11:59:42 [crit] 4075#0: *6 connect() a 127.0.0.1:8001 falló (13: Permiso denegado) al conectarse al canal ascendente, cliente: 127.0.0.1, servidor: localhost, solicitud: "GET / HTTP/1.1", aguas arriba:, "http://127.0.0.1:8001/"host: "localhost:8080"

A continuación se muestra el contenido de mi nginx.confarchivo;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

En la página HTML estoy obteniendo 502 Bad Gateway.

¿Qué error estoy cometiendo?

Mulagala avatar May 30 '14 13:05 Mulagala
Aceptado

Descargo de responsabilidad

Asegúrese de que no haya implicaciones de seguridad para su caso de uso antes de ejecutar esto.

Respuesta

Tuve un problema similar al lograr que Fedora 20, Nginx, Node.js y Ghost (blog) funcionaran. Resulta que mi problema se debió a SELinux .

Esto deberia resolver el problema:

setsebool -P httpd_can_network_connect 1

Detalles

Revisé errores en los registros de SELinux:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

Y descubrí que ejecutar los siguientes comandos solucionó mi problema:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Opción #2 (probablemente más segura)

setsebool -P httpd_can_network_relay 1

https://security.stackexchange.com/questions/152358/difference-between-selinux-booleans-httpd-can-network-relay-and-httpd-can-net

Referencias

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/
https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details
http://wiki.gentoo .org/wiki/SELinux/Tutorials/Managing_network_port_labels

joebarbere avatar Jul 18 '2014 17:07 joebarbere

Yo también me encontré con este problema. Otra solución es alternar el valor booleano de SELinux para conectarse a la red httpd on(Nginx usa la etiqueta httpd).

setsebool httpd_can_network_connect on

Para que el cambio persista, utilice el indicador -P.

setsebool httpd_can_network_connect on -P

Puede ver una lista de todos los valores booleanos de SELinux disponibles para httpd usando

getsebool -a | grep httpd
Sid avatar Jul 14 '2015 10:07 Sid

Resolví mi problema ejecutando mi Nginx como el usuario con el que estoy conectado actualmente, mulagala .

De forma predeterminada, el usuario como nginx se define en la sección superior del nginx.confarchivo como se ve a continuación;

user nginx; # Default Nginx user

Cambie nginx por el nombre de su usuario actual, aquí, mulagala .

user mulagala; # Custom Nginx user (as username of the current logged in user)

Sin embargo, es posible que esto no solucione el problema real y que en realidad tenga efectos secundarios ocasionales.

Para obtener una solución eficaz, consulte la solución de Joseph Barbere .

Mulagala avatar Jun 04 '2014 10:06 Mulagala

Tuve un problema similar en Centos 7. Cuando intenté aplicar la solución prescrita por Sorin, comencé a moverme en ciclos. Primero me negaron el permiso {escribir}. Luego, cuando resolví eso, se me negó el permiso {connectto}. Luego regrese nuevamente al permiso {escribir} denegado.

Siguiendo la respuesta de @Sid anterior sobre verificar las banderas usándolas getsebool -a | grep httpdy alternando, descubrí que además de que httpd_can_network_connect estaba desactivado. http_anon_write también estaba desactivado, lo que provocó que se denegara el permiso de escritura y el permiso denegado {connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

Obtenido usando sudo cat /var/log/audit/audit.log | grep nginx | grep denegó como se explicó anteriormente.

Así que los resolví uno a la vez, alternando las banderas una a la vez.

setsebool httpd_can_network_connect on -P

Luego ejecute los comandos especificados por @sorin y @Joseph arriba

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

Básicamente, puede verificar los permisos establecidos en setsebool y correlacionarlos con el error obtenido de grepp'ing' audit.log nginx, denegado.

unlockme avatar Aug 04 '2017 07:08 unlockme
  1. Primero vea lo que se niega:
sudo cat /var/log/audit/audit.log | grep nginx | grep denied
type=AVC msg=audit(1618940614.934:38415): avc:  denied  { connectto } for
pid=18016 comm="nginx" path="/home/deployer/project/tmp/sockets/puma.sock" scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
tclass=unix_stream_socket permissive=1
  1. En mi caso ayuda en CentOS7:
sudo setenforce 0

setsebool httpd_can_network_connect on -P
setsebool httpd_can_network_relay on -P

Después podrás ver qué está habilitado:

getsebool -a | grep httpd
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> on
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> on
httpd_can_network_memcache --> off
httpd_can_network_relay --> on
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> off
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_ipa --> off
httpd_run_preupgrade --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off