it-swarm.com.de

nginx: Keine Berechtigung zum Binden von Port 8090, aber es wird an 80 und 8080 gebunden

Ich habe mit einem seltsamen Verhalten im Zusammenhang mit Berechtigungen zu kämpfen: Wenn ich nginx so konfiguriere, dass es Port 8080 abhört, funktioniert alles wie erwartet, aber wenn ich einen anderen Port verwende, bekomme ich so etwas wie

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

im /var/log/nginx/error.log

Ich habe keine Ahnung, wo ich nachsehen soll, daher weiß ich nicht genau, welche Teile der Konfiguration interessant sein könnten.

in der Datei nginx.conf ist nginx so konfiguriert, dass es als nginx ausgeführt wird:

user  nginx;

Auch Benutzer nginx ist in einer anderen Gruppe 'git'

in der Site-Konfiguration habe ich versucht, so zuzuhören:

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

Ich habe nur noch einen Listener, der Port 443 bedient.

Wenn ich einen anderen Dienst starte, z. a SimpleHTTPServer auf Port 8090 usw. als Nicht-Root funktioniert alles einwandfrei:

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

Was können die Gründe für die Verweigerung von Berechtigungen im Allgemeinen sein?

System ist Fedora 18 ngnix ist Lager Fedora 1.2.9

39
frans

Dies wird höchstwahrscheinlich mit SELinux zusammenhängen

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

Wie Sie der obigen Ausgabe entnehmen können, darf http mit SELinux im Erzwingungsmodus nur an die aufgelisteten Ports gebunden werden. Die Lösung besteht darin, die Ports, an die Sie binden möchten, zur Liste hinzuzufügen

semanage port -a -t http_port_t  -p tcp 8090

fügt der Liste Port 8090 hinzu.

59
user9517