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' อีกกลุ่มหนึ่ง

ในไซต์ -config ฉันพยายามฟังเช่นนี้:

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 ฯลฯ เนื่องจากไม่ใช่ทุกอย่างทำงานได้ดี:

$ 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 คือ stock fedora 1.2.9


ก่อนอื่นคุณต้องอัปเดต Fedora เป็นเวอร์ชั่นที่รองรับ ประการที่สองลองอีกครั้ง /var/log/audit/audit.logหากยังคงล้มเหลวในการตรวจสอบ
Michael Hampton

2
มันไม่ได้มีประโยชน์มาก Fedora 18 จะยังคงสนับสนุนและถึงแม้ว่ามันจะไม่ได้รับอนุญาตระบบลินุกซ์ไม่ได้เปลี่ยนแปลงโดยสิ้นเชิงตั้งแต่นั้นมา
frans

ใช่ ... อีกสี่วัน
Michael Hampton

ทำซ้ำคำตอบstackoverflow.com/a/24830777/2443988
Sumit Ramteke

คำตอบ:


51

สิ่งนี้น่าจะเกี่ยวข้องกับ 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 ด้วย ..
ราน

1
@frans: มีข้อมูลมากมายคุณเพียงแค่ไม่รู้ตัวหรือวิธีการเข้าถึงและใช้งาน หากคุณมี SELiux ในโหมดบังคับใช้หรืออนุญาตอนุญาตการปฏิเสธทั้งหมดจะถูกบันทึกลงใน /var/log/audit.log มีเครื่องมือที่ช่วยให้คุณกรองทำความเข้าใจและจัดการข้อมูลและนโยบาย SELinux - ดูที่หน้า soraux ของ fedoraและ manpages สำหรับ ausearch, audit2why, audit2allow
user9517 รองรับ GoFundMonica

ถ้าคุณได้รับคุณสามารถติดตั้งด้วยsemanage: command not found yum install policycoreutils-python
mwfearnley

8080 ไม่ได้อยู่ในรายการสำหรับ http_port_t แต่ก็ยังใช้งานได้ความคิดใด ๆ
MaxiWheat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.