nginx: sin permiso para enlazar el puerto 8090 pero se une a 80 y 8080


37

Estoy luchando con un comportamiento extraño relacionado con los permisos: cuando configuro nginx para escuchar el puerto 8080 todo funciona como se esperaba, pero cuando uso cualquier otro puerto obtengo algo como

2014/01/10 09:20:02 [emerg] 30181#0: bind() to 0.0.0.0:8090 failed (13: Permission denied)

en /var/log/nginx/error.log

No tengo idea de dónde mirar, así que realmente no sé qué partes de la configuración podrían ser interesantes.

en nginx.conf nginx está configurado para ejecutarse como nginx:

user  nginx;

También el usuario nginx está en otro grupo 'git'

en la configuración del sitio intenté escuchar así:

server {
    listen 8090; #does not work
    #listen 8080; #works
    #listen 9090; #does not work
    #listen 9090 default; #does not work neighter
    #listen 80; #works!
    server_name <some IP>;
    ...
}

Solo tengo un oyente más que sirve al puerto 443.

Cuando inicio algún otro servicio, por ejemplo, un SimpleHTTPServeren el puerto 8090, etc., como no root, todo funciona bien:

$ python -m SimpleHTTPServer 8090
Serving HTTP on 0.0.0.0 port 8090 ...
localhost.localdomain - - [10/Jan/2014 09:34:19] "GET / HTTP/1.1" 200 -

¿Cuáles pueden ser los motivos de los permisos denegados en general?

El sistema es Fedora 18 ngnix es stock fedora 1.2.9


Primero, necesita actualizar a una versión compatible de Fedora. Segundo, intente nuevamente. Si aún falla, verifique /var/log/audit/audit.log.
Michael Hampton

2
Esto no es muy útil. Fedora 18 todavía es compatible e incluso si no fuera el sistema de permisos de Linux no ha cambiado totalmente desde entonces.
frans

Sí ... por otros cuatro días.
Michael Hampton

Respuestas:


52

Esto probablemente estará relacionado con SELinux

semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

Como puede ver en el resultado anterior con SELinux en modo de ejecución, http solo puede unirse a los puertos enumerados. La solución es agregar los puertos que desea enlazar a la lista

semanage port -a -t http_port_t  -p tcp 8090

agregará el puerto 8090 a la lista.


1
eso ha sido, gracias! Pero, ¿por qué hay tan poca información? Supongo que otras personas también usan Fedora con SELinux ...
frans

1
@frans: hay mucha información, simplemente no la conoces ni cómo acceder y usarla. Si tiene SELiux en modo obligatorio o permisivo, todas las denegaciones se registran en /var/log/audit.log. Hay herramientas disponibles que le permiten filtrar, comprender y administrar la información y la política de SELinux. Consulte las páginas de fedora seliux y las páginas de manual de ausearch, audit2why, audit2allow.
user9517 es compatible con GoFundMonica el

Si lo consigue semanage: command not found, puede instalarlo con yum install policycoreutils-python.
mwfearnley

8080 no está en la lista para http_port_t pero aún funciona, ¿alguna idea de por qué?
MaxiWheat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.