nginx: pas d'autorisation de lier le port 8090 mais il se lie aux 80 et 8080

37

J'ai un problème avec un comportement étrange lié aux autorisations: lorsque je configure nginx pour écouter le port 8080, tout fonctionne comme prévu, mais lorsque j'utilise un autre port, je reçois quelque chose comme:

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

dans /var/log/nginx/error.log

Je ne sais pas où regarder, donc je ne sais pas vraiment quelles parties de la configuration pourraient être intéressantes.

dans nginx.conf nginx est configuré pour s'exécuter en tant que nginx:

user  nginx;

De plus, l'utilisateur nginx est dans un autre groupe 'git'

dans le site-config j'ai essayé d'écouter comme ceci:

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

J'ai un seul auditeur supplémentaire qui sert le port 443.

Lorsque je lance un autre service, par exemple un SimpleHTTPServerport sur le port 8090, etc. en tant que service non root, tout fonctionne correctement:

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

Quelles peuvent être les raisons des autorisations refusées en général?

Le système est Fedora 18 ngnix est stock fedora 1.2.9

Frans
la source
Tout d'abord, vous devez mettre à jour une version prise en charge de Fedora. Deuxièmement, essayez à nouveau. Si cela échoue toujours, vérifiez /var/log/audit/audit.log.
Michael Hampton
2
Ce n'est pas très utile. Fedora 18 est toujours pris en charge et même s’il ne s’agissait pas du système d’autorisation Linux, il n’a pas totalement changé depuis.
frans
Oui ... encore quatre jours.
Michael Hampton
Réponse
répétée

Réponses:

52

Cela sera probablement lié à SELinux

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

Comme vous pouvez le voir dans la sortie ci-dessus avec SELinux en mode d'application forcé, http est uniquement autorisé à se lier aux ports répertoriés. La solution consiste à ajouter à la liste les ports que vous souhaitez lier.

semanage port -a -t http_port_t  -p tcp 8090

ajoutera le port 8090 à la liste.

user9517 prend en charge GoFundMonica
la source
1
ça y est, merci! Mais pourquoi y a-t-il si peu d'informations? Je suppose que d'autres personnes utilisent aussi Fedora avec SELinux ..
frans
1
@frans: Il y a beaucoup d'informations, vous ne le savez pas, ni comment y accéder et l'utiliser. Si vous utilisez SELiux en mode d'exécution ou en mode permissif, tous les refus sont consignés dans /var/log/audit.log. Il existe des outils permettant de filtrer, comprendre et gérer les informations et la politique SELinux. Consultez les pages Fedora seliux et les pages de manuel relatives à ausearch, audit2why, audit2allow.
user9517 prend en charge GoFundMonica le
Si vous avez semanage: command not found, vous pouvez l'installer avec yum install policycoreutils-python.
mwfearnley
8080 ne figure pas dans la liste pour http_port_t mais cela fonctionne quand même, vous savez pourquoi?
MaxiWheat