nginx: brak pozwolenia na powiązanie portu 8090, ale wiąże się z 80 i 8080

37

Walczę z jakimś dziwnym zachowaniem związanym z uprawnieniami: kiedy konfiguruję nginx, aby nasłuchiwał portu 8080, wszystko działa zgodnie z oczekiwaniami, ale kiedy używam innego portu, dostaję coś takiego

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

w /var/log/nginx/error.log

Nie mam pojęcia, na co patrzeć, więc tak naprawdę nie wiem, które części konfiguracji mogą być interesujące.

w nginx.conf nginx jest skonfigurowany do działania jako nginx:

user  nginx;

Również użytkownik nginx należy do innej grupy „git”

w konfiguracji strony próbowałem słuchać w ten sposób:

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

Mam tylko jednego odbiornika, który obsługuje port 443.

Kiedy uruchamiam inną usługę, np. SimpleHTTPServerNa porcie 8090 itp. Jako użytkownika innego niż root, wszystko działa dobrze:

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

Jakie mogą być przyczyny odmowy uprawnień w ogóle?

System to Fedora 18 ngnix to magazyn fedora 1.2.9

franki
źródło
Najpierw musisz zaktualizować do obsługiwanej wersji Fedory. Po drugie, spróbuj ponownie. Jeśli nadal nie działa, sprawdź /var/log/audit/audit.log.
Michael Hampton
2
To nie jest bardzo pomocne. Fedora 18 jest nadal obsługiwana i nawet jeśli nie był to system uprawnień Linuksa od tego czasu nie zmienił się całkowicie.
frans
Tak ... przez kolejne cztery dni.
Michael Hampton
Powtórz odpowiedź stackoverflow.com/a/24830777/2443988
Sumit Ramteke 18.04.2018

Odpowiedzi:

52

Najprawdopodobniej będzie to związane z SELinux

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

Jak widać z powyższego wyniku z SELinuksem w trybie wymuszania, http może łączyć się tylko z wymienionymi portami. Rozwiązaniem jest dodanie do listy portów, które chcesz powiązać

semanage port -a -t http_port_t  -p tcp 8090

doda port 8090 do listy.

user9517 obsługuje GoFundMonica
źródło
1
to wszystko, dzięki! Ale dlaczego jest tak mało informacji? Sądzę, że inni też używają Fedory z SELinux…
frans
1
@frans: Jest mnóstwo informacji, po prostu nie jesteś ich świadomy ani jak uzyskać do niego dostęp i jak z niego korzystać. Jeśli masz SELiux w trybie wymuszania lub zezwolenia, wszystkie odmowy są rejestrowane w /var/log/audit.log. Dostępne są narzędzia, które pozwalają filtrować, rozumieć i zarządzać informacjami oraz polityką SELinuksa - spójrz na strony Fedora seliux i strony man dla ausearch, audit2why, audit2allow.
user9517 obsługuje GoFundMonica
Jeśli otrzymasz semanage: command not found, możesz go zainstalować za pomocą yum install policycoreutils-python.
mwfearnley
8080 nie ma na liście http_port_t, ale nadal działa, jakiś pomysł, dlaczego?
MaxiWheat