nginx: sem permissão para ligar a porta 8090, mas vincula a 80 e 8080


37

Estou tendo algum comportamento estranho relacionado à permissão: quando configuro o nginx para ouvir a porta 8080, tudo funciona como esperado, mas quando uso qualquer outra porta, 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

Não tenho idéia de onde procurar, então não sei realmente quais partes da configuração podem ser interessantes.

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

user  nginx;

O usuário nginx também 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 serve a porta 443.

Quando inicio algum outro serviço, por exemplo, um SimpleHTTPServerna 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 os motivos das permissões negadas em geral?

Sistema é Fedora 18 ngnix é estoque fedora 1.2.9


Primeiro, você precisa atualizar para uma versão suportada do Fedora. Segundo, tente novamente. Se ainda assim falhar, verifique /var/log/audit/audit.log.
Michael Hampton

2
Isso não é muito útil. O Fedora 18 ainda é suportado e, mesmo que não fosse o sistema de permissão do linux, não mudou totalmente desde então.
11449

Sim ... por mais quatro dias.
Michael Hampton

Respostas:


52

Provavelmente, isso está 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 de imposição, o http só pode ser vinculado às portas listadas. A solução é adicionar as portas que você deseja ligar à lista

semanage port -a -t http_port_t  -p tcp 8090

adicionará a porta 8090 à lista.


1
é isso aí, obrigado! Mas por que há tão pouca informação? Eu acho que outras pessoas usam Fedora com o SELinux, também ..
Frans

1
@rans: Há muita informação, você simplesmente não está ciente disso ou de como acessá-lo e usá-lo. Se você tiver o SELiux no modo obrigatório ou permissivo, todas as negações serão registradas em /var/log/audit.log. Existem ferramentas disponíveis que permitem filtrar, entender e gerenciar as informações e a política do SELinux - dê uma olhada nas páginas do fedora seliux e nas páginas de manual para ausearch, audit2why, audit2allow.
user9517 suporta GoFundMonica

Se você conseguir semanage: command not found, você pode instalá-lo com yum install policycoreutils-python.
Mkfearnley # 28/18

O 8080 não está listado para http_port_t, mas ainda funciona, alguma ideia do porquê?
MaxiWheat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.