nginx: Keine Berechtigung zum Binden von Port 8090, aber für 80 und 8080

37

Ich habe Probleme mit einem merkwürdigen berechtigungsbezogenen Verhalten: Wenn ich nginx so konfiguriere, dass es Port 8080 abhört, funktioniert alles wie erwartet, aber wenn ich einen anderen Port verwende, erhalte 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, wohin ich schauen 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-config 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 SimpleHTTPServerstarte, z. B. einen 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 generelle Verweigerung von Berechtigungen sein?

Das System ist Fedora 18 ngnix is ​​stock fedora 1.2.9

frans
quelle
Zunächst müssen Sie auf eine unterstützte Version von Fedora aktualisieren. Zweitens versuchen Sie es erneut. Wenn es immer noch fehlschlägt, überprüfen Sie /var/log/audit/audit.log.
Michael Hampton
2
Das ist nicht sehr hilfreich. Fedora 18 wird immer noch unterstützt und auch wenn es nicht das Linux-Berechtigungssystem war, hat sich das seitdem nicht grundlegend geändert.
Frans
Ja ... für weitere vier Tage.
Michael Hampton
Wiederholen Sie die Antwort stackoverflow.com/a/24830777/2443988
Sumit Ramteke

Antworten:

52

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 binden. 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 Port 8090 zur Liste hinzu.

user9517 unterstützt GoFundMonica
quelle
1
das wars, danke! Aber warum gibt es so wenige Informationen? Ich würde vermuten, dass auch andere Leute Fedora mit SELinux benutzen.
frans
1
@frans: Es gibt viele Informationen, Sie sind sich einfach nicht darüber im Klaren oder wie Sie darauf zugreifen und sie verwenden. Wenn sich SELiux im erzwingenden oder zulässigen Modus befindet, werden alle Ablehnungen in /var/log/audit.log protokolliert. Es sind Tools verfügbar, mit denen Sie Informationen und SELinux-Richtlinien filtern, verstehen und verwalten können. Schauen Sie sich die fedora seliux-Seiten und die Hilfeseiten für ausearch, audit2why, audit2allow an.
user9517 unterstützt GoFundMonica
Wenn Sie bekommen semanage: command not found, können Sie es mit installieren yum install policycoreutils-python.
Mwfearnley
8080 ist nicht für http_port_t gelistet, funktioniert aber trotzdem. Warum?
MaxiWheat