(13: Permiso denegado) mientras se conecta al canal ascendente:[nginx]
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:8001
en 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.conf
archivo;
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?
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
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
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.conf
archivo 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 .
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 httpd
y 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.
- 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
- 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