nginx: nessuna autorizzazione per associare la porta 8090 ma si lega a 80 e 8080


37

Sono alle prese con uno strano comportamento legato alle autorizzazioni: quando configuro nginx per ascoltare la porta 8080 tutto funziona come previsto, ma quando uso un'altra porta ottengo qualcosa di simile

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

nel /var/log/nginx/error.log

Non ho idea di dove guardare, quindi non so davvero quali parti della configurazione potrebbero essere interessanti.

in nginx.conf nginx è configurato per funzionare come nginx:

user  nginx;

Anche l'utente nginx è in un altro gruppo 'git'

nella configurazione del sito ho provato ad ascoltare in questo modo:

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

Ho solo un altro ascoltatore che serve la porta 443.

Quando avvio qualche altro servizio, ad es. Su una SimpleHTTPServerporta 8090 ecc., Come non root tutto funziona bene:

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

Quali possono essere i motivi per le autorizzazioni negate in generale?

System is Fedora 18 ngnix è stock fedora 1.2.9


Innanzitutto, è necessario aggiornare a una versione supportata di Fedora. Secondo, riprova. Se il problema persiste, controllare /var/log/audit/audit.log.
Michael Hampton

2
Questo non è molto utile. Fedora 18 è ancora supportato e anche se non era il sistema di permessi di Linux non è cambiato completamente da allora.
Frans

Sì ... per altri quattro giorni.
Michael Hampton

Risposte:


52

Molto probabilmente questo sarà correlato a SELinux

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

Come si può vedere dall'output sopra con SELinux in modalità di esecuzione, http è autorizzato a collegarsi solo alle porte elencate. La soluzione è aggiungere le porte che si desidera associare all'elenco

semanage port -a -t http_port_t  -p tcp 8090

aggiungerà la porta 8090 all'elenco.


1
grazie, grazie! Ma perché ci sono così poche informazioni? Direi altre persone usano Fedora con SELinux, troppo ..
Frans

1
@frans: ci sono molte informazioni, non ne sei a conoscenza o su come accedervi e utilizzarle. Se hai SELiux in modalità esecutiva o permissiva, tutti i rifiuti vengono registrati in /var/log/audit.log. Ci sono strumenti disponibili che ti consentono di filtrare, comprendere e gestire le informazioni e la politica SELinux - dai un'occhiata alle pagine di fedora seliux e alle manpage di ausearch, audit2why, audit2allow.
user9517 supporta GoFundMonica il

Se ottieni semanage: command not found, puoi installarlo con yum install policycoreutils-python.
mwfearnley,

8080 non è elencato per http_port_t ma funziona ancora, hai idea del perché?
MaxiWheat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.