nginx: tidak ada izin untuk mengikat port 8090 tetapi mengikat ke 80 dan 8080

37

Saya berjuang dengan beberapa perilaku terkait izin aneh: ketika saya mengkonfigurasi nginx untuk mendengarkan port 8080 semuanya berfungsi seperti yang diharapkan, tetapi ketika saya menggunakan port lain saya mendapatkan sesuatu seperti

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

di /var/log/nginx/error.log

Saya tidak tahu ke mana harus mencari jadi saya tidak benar-benar tahu bagian mana dari konfigurasi yang mungkin menarik.

di nginx.conf nginx dikonfigurasi untuk dijalankan sebagai nginx:

user  nginx;

Juga pengguna nginx ada di grup lain 'git'

di situs-config saya mencoba mendengarkan seperti ini:

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

Saya hanya memiliki satu pendengar lagi yang melayani port 443.

Ketika saya memulai beberapa layanan lain misalnya SimpleHTTPServerpada port 8090 dll sebagai non-root semuanya berfungsi dengan baik:

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

Apa alasannya untuk izin yang ditolak secara umum?

Sistem adalah Fedora 18 ngnix adalah stock fedora 1.2.9

frans
sumber
Pertama, Anda perlu memperbarui ke versi Fedora yang didukung. Kedua, coba lagi. Jika masih gagal, periksa /var/log/audit/audit.log.
Michael Hampton
2
Ini tidak terlalu membantu. Fedora 18 ini masih didukung dan bahkan jika itu bukan sistem izin linux tidak berubah sama sekali sejak saat itu.
frans
Ya ... selama empat hari lagi.
Michael Hampton
Ulangi Jawab stackoverflow.com/a/24830777/2443988
Sumit Ramteke

Jawaban:

52

Ini kemungkinan besar akan terkait dengan SELinux

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

Seperti yang Anda lihat dari output di atas dengan SELinux dalam mode penguatan http hanya diperbolehkan untuk mengikat ke port yang terdaftar. Solusinya adalah dengan menambahkan port yang ingin Anda ikat ke daftar

semanage port -a -t http_port_t  -p tcp 8090

akan menambahkan port 8090 ke daftar.

user9517 mendukung GoFundMonica
sumber
1
itu saja, terima kasih! Tetapi mengapa hanya ada sedikit informasi? Saya kira orang lain juga menggunakan Fedora dengan SELinux ..
frans
1
@frans: Ada banyak informasi, Anda tidak menyadarinya atau bagaimana mengakses dan menggunakannya. Jika Anda memiliki SELiux dalam mode penegakan atau permisif maka semua penolakan dicatat ke /var/log/audit.log. Ada alat yang tersedia yang memungkinkan Anda untuk memfilter, memahami dan mengelola informasi dan kebijakan SELinux - lihat halaman fedora seliux dan halaman manual untuk penelitian, audit2why, audit2allow.
user9517 mendukung GoFundMonica
Jika Anda dapat semanage: command not found, Anda dapat menginstalnya dengan yum install policycoreutils-python.
mwfearnley
8080 tidak terdaftar untuk http_port_t tetapi masih berfungsi, tahu mengapa?
MaxiWheat