nginx: немає дозволу прив’язувати порт 8090, але він посилається на 80 та 8080


37

Я бореться з якоюсь дивною поведінкою, пов’язаною з дозволом: коли я налаштовую nginx для прослуховування порту 8080, все працює як слід, але коли я використовую будь-який інший порт, я отримую щось на зразок

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

в /var/log/nginx/error.log

У мене немає поняття, куди дивитись, тому я не знаю, які частини конфігурації можуть бути цікавими.

в nginx.conf nginx налаштований для запуску як nginx:

user  nginx;

Також користувач nginx знаходиться в іншій групі 'git'

у налаштуваннях сайту я намагався слухати так:

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

У мене є лише один слухач, який обслуговує порт 443.

Коли я запускаю якусь іншу послугу, наприклад, SimpleHTTPServerна порту 8090 і т.д. як не-root, все працює добре:

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

Які можуть бути причини заборони дозволів взагалі?

Система Fedora 18 ngnix є запас Fedora 1.2.9


Спочатку потрібно оновити до підтримуваної версії Fedora. По-друге, спробуйте ще раз. Якщо вона все-таки не працює, перевірте /var/log/audit/audit.log.
Майкл Хемптон

2
Це не дуже допомагає. Fedora 18 все ще підтримується, і навіть якщо це не дозвільна система Linux, з тих пір вона повністю не змінилася.
франс

Так ... ще чотири дні.
Майкл Хемптон

Повторіть відповідь stackoverflow.com/a/24830777/2443988
Sumit Ramteke

Відповіді:


52

Це, швидше за все, буде пов'язано з SELinux

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

Як видно з результатів, викладених вище з SELinux у режимі примусового використання, http дозволяється прив'язувати лише до перелічених портів. Рішення полягає в тому, щоб до списку додати порти, які потрібно прив’язати

semanage port -a -t http_port_t  -p tcp 8090

додасть порт 8090 до списку.


1
це було, спасибі! Але чому так мало інформації? Я б здогадався, що інші користуються Fedora також із SELinux ..
frans

1
@frans: інформації є багато, ви просто не знаєте про неї, як отримати доступ та використовувати її. Якщо у вас є режим SELiux в режимі примусового або дозвільного характеру, то всі відмови реєструються в /var/log/audit.log. Є доступні інструменти, які дозволяють фільтрувати, розуміти та керувати інформацією та політикою SELinux - ознайомтеся зі сторінками Fedora seliux та на манежах для ausearch, audit2why, audit2allow.
user9517 підтримує GoFundMonica

Якщо ви отримаєте semanage: command not found, можете встановити його yum install policycoreutils-python.
mwfearnley

8080 не вказаний для http_port_t, але він все ще працює, будь-яка ідея чому?
MaxiWheat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.