nginx: 8090 portunu bağlama izniniz yok ama 80 ve 8080'e bağlanıyor


37

Garip izinlerle ilgili bazı davranışlarla mücadele ediyorum: nginx'i 8080 numaralı bağlantı noktasını dinleyecek şekilde yapılandırdığımda her şey beklendiği gibi çalışıyor, ancak başka bir bağlantı noktası kullandığımda gibi bir şey alıyorum

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

içinde /var/log/nginx/error.log

Nereye bakacağım hakkında hiçbir fikrim yok, bu yüzden konfigürasyonun hangi bölümlerinin ilginç olabileceğini gerçekten bilmiyorum.

nginx.conf'da nginx, nginx olarak çalışacak şekilde yapılandırılmıştır:

user  nginx;

Ayrıca kullanıcı nginx başka bir grupta 'git'

site-config içinde şöyle dinlemeye çalıştım:

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 numaralı limana hizmet eden bir tane daha dinleyicim var.

Başka bir hizmete başladığımda, örneğin SimpleHTTPServer8090 portunda, root dışı olarak, her şey iyi çalışıyor:

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

Genel olarak reddedilen izinlerin nedenleri neler olabilir?

Sistem Fedoradır 18 ngnix 1.2.9 stoklarıdır


Öncelikle, Fedora'nın desteklenen bir sürümüne güncellemeniz gerekir. İkincisi, tekrar deneyin. Hala başarısız olursa kontrol edin /var/log/audit/audit.log.
Michael Hampton

2
Bu çok yardımcı değil. Fedora 18 olduğu hala desteklenen ve o olmasa bile linux izin sistemi o zamandan beri tamamen değişmedi.
frans

Evet ... dört gün daha.
Michael Hampton

Yanıtlar:


52

Bu muhtemelen SELinux ile ilgili olacak

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

Yukarıdaki çıktıdan görebileceğiniz gibi zorlama modunda SELinux ile http yalnızca listelenen bağlantı noktalarına bağlanabilir. Çözüm, bağlamak istediğiniz portları listeye eklemek.

semanage port -a -t http_port_t  -p tcp 8090

8090 portunu listeye ekleyecektir.


1
bu oldu, teşekkürler! Peki neden bu kadar az bilgi var? Diğer insanların da SELinux .. Fedora kullanmak tahmin ediyorum
frans

1
@frans: Çok fazla bilgi var, bunun veya onun nasıl erişilip kullanılacağının farkında değilsiniz. SELiux'u zorlama veya izin verme modunda kullanıyorsanız, tüm inkarlar /var/log/audit.log adresine kaydedilir. Bilgileri ve SELinux politikasını filtrelemenizi, anlamanızı ve yönetmenizi sağlayan araçlar mevcuttur - fedora seliux sayfalarına bir göz atın ve ausearch, audit2why, audit2allow için manpagesine bakın.
GoFundMonica'yı

Eğer alırsanız semanage: command not found , onu yükleyebilirsiniz yum install policycoreutils-python.
mwfearnley

8080, http_port_t için listelenmemiş ancak hala çalışıyor, neden?
MaxiWheat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.