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

Frans
источник
Во-первых, вам нужно обновить поддерживаемую версию 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 в список.

user9517 поддерживает GoFundMonica
источник
1
вот и все, спасибо! Но почему так мало информации? Я предполагаю, что другие люди тоже используют Fedora с SELinux ..
Франс
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