nginx: nenhuma permissão para ligar a porta 8090 mas liga-se a 80 e 8080

30

Estou lutando com algum comportamento estranho relacionado à permissão: quando eu configuro o nginx para ouvir a porta 8080, tudo funciona como esperado, mas quando eu uso qualquer outra porta, eu recebo algo como

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

em /var/log/nginx/error.log

Eu não tenho ideia de onde olhar, então eu realmente não sei quais partes da configuração podem ser interessantes.

no nginx.conf O nginx está configurado para ser executado como nginx:

user  nginx;

Também o usuário nginx está em outro grupo 'git'

no site-config tentei ouvir assim:

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>;
    ...
}

Eu tenho apenas mais um ouvinte que atende a porta 443.

Quando inicio algum outro serviço, por ex. um SimpleHTTPServer na porta 8090 etc. como não raiz tudo funciona bem:

$ 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 -

Quais podem ser as razões para as permissões negadas em geral?

O sistema é o Fedora 18 O ngnix é armazenado no fedora 1.2.9

    
por frans 10.01.2014 / 09:41

1 resposta

40

Isso provavelmente estará relacionado ao SELinux

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

Como você pode ver na saída acima com o SELinux no modo enforcing, o http é permitido somente para ligar as portas listadas. A solução é adicionar as portas que você deseja vincular à lista

semanage port -a -t http_port_t  -p tcp 8090

adicionará a porta 8090 à lista.

    
por 10.01.2014 / 09:50