Frage nginx: keine Erlaubnis, Port 8090 zu binden, aber es bindet an 80 und 8080


Ich kämpfe mit etwas seltsamem Berechtigungsverhalten: wenn ich nginx konfiguriere, um Port 8080 zu hören, funktioniert alles wie erwartet, aber wenn ich irgendeinen anderen Port verwende, bekomme ich 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 hinschauen soll, deshalb weiß ich nicht wirklich, welche Teile der Konfiguration interessant sein könnten.

in nginx.conf nginx ist so konfiguriert, dass es als nginx läuft:

user  nginx;

Auch Benutzer nginx ist in einer anderen Gruppe 'Git'

In der Site-Config habe ich versucht so zu hö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 einen weiteren Listener, der Port 443 bedient.

Wenn ich einen anderen Dienst z. ein SimpleHTTPServer auf Port 8090 etc. als nicht root alles funktioniert gut:

$ 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 Gründe für verweigerte Berechtigungen im Allgemeinen sein?

System ist Fedora 18 ngnix ist Lager Fedora 1.2.9


30
2018-01-10 08:41


Ursprung


Zuerst müssen Sie auf eine unterstützte Version von Fedora aktualisieren. Zweitens, versuche es noch einmal. Wenn es immer noch fehlschlägt, überprüfen Sie /var/log/audit/audit.log. - Michael Hampton♦
Dies ist nicht sehr hilfreich. Fedora 18 ist immer noch unterstützt und auch wenn es nicht war das Linux-Berechtigungssystem seit damals nicht vollständig geändert. - frans
Ja ... für weitere vier Tage. - Michael Hampton♦
Antwort wiederholen stackoverflow.com/a/24830777/2443988 - Sumit Ramteke


Antworten:


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 aus der obigen Ausgabe mit SELinux im Enforcing-Modus sehen können, darf http nur an die aufgeführten Ports binden. Die Lösung besteht darin, die Ports hinzuzufügen, die Sie an die Liste binden möchten

semanage port -a -t http_port_t  -p tcp 8090

fügt Port 8090 zur Liste hinzu.


39
2018-01-10 08:50



das war's, danke! Aber warum gibt es so wenige Informationen? Ich würde raten, dass andere Leute Fedora auch mit SELinux benutzen. - frans
@Frans: Es gibt viele Informationen, Sie wissen nur nicht darüber oder wie Sie darauf zugreifen und es verwenden können. Wenn Sie SELiux im Erzwingungs- oder Freigabemodus haben, werden alle Ablehnungen in /var/log/audit.log protokolliert. Es gibt Tools, mit denen Sie die Informationen und die SELinux - Richtlinie filtern, verstehen und verwalten können - werfen Sie einen Blick auf die Fedora Seliux Seiten und die Hilfeseiten für ausearch, audit2why, audit2allow. - Iain
Wenn du bekommst semanage: command not foundSie können es mit installieren yum install policycoreutils-python. - mwfearnley