ฉันต้องการเรียกใช้เว็บเซิร์ฟเวอร์บน Mac ของฉันเป็นกระบวนการที่ไม่ใช่รูท โดยปกติกระบวนการรูทเท่านั้นที่สามารถผูกกับพอร์ต 80 (หรือพอร์ตใดก็ได้ที่ต่ำกว่า 1024)
ฉันสามารถเปิดพอร์ต 80 โดยเฉพาะเพื่อให้กระบวนการที่ไม่ใช่รูทสามารถฟังได้หรือไม่?
ฉันต้องการเรียกใช้เว็บเซิร์ฟเวอร์บน Mac ของฉันเป็นกระบวนการที่ไม่ใช่รูท โดยปกติกระบวนการรูทเท่านั้นที่สามารถผูกกับพอร์ต 80 (หรือพอร์ตใดก็ได้ที่ต่ำกว่า 1024)
ฉันสามารถเปิดพอร์ต 80 โดยเฉพาะเพื่อให้กระบวนการที่ไม่ใช่รูทสามารถฟังได้หรือไม่?
คำตอบ:
สิ่งนี้ยากที่จะทำได้โดยการออกแบบและหากคุณไม่สามารถเข้าถึงรูทเครื่องของคุณจะไม่สามารถทำงานต่อไปนี้ได้เนื่องจากต้องใช้รูทเพื่อตั้งค่าการเปลี่ยนแปลง เมื่อมีการเปลี่ยนแปลงโปรแกรมผู้ใช้จะสามารถเข้าถึงได้โดยไม่ต้องรูท
มีสองวิธีทั่วไปในการทำสิ่งนี้ให้สำเร็จและสิ่งที่คุณเลือกจะขึ้นอยู่กับสาเหตุที่คุณพยายามแก้ไขข้อ จำกัด :
โดยการกำหนดค่าเครื่องของคุณใหม่เพื่อส่งทราฟฟิกพอร์ต 80 ไปยังพอร์ต 8080 หรือพอร์ตใด ๆ ที่คุณเลือกจากนั้นคุณสามารถอนุญาตให้เซิร์ฟเวอร์พื้นที่ผู้ใช้รับพอร์ตสิทธิ์พิเศษในพื้นที่ที่ได้รับการเข้าถึง
กระบวนการตรงไปตรงมา:
ขั้นตอนที่ 1: ดูกฎไฟร์วอลล์ปัจจุบัน
sudo ipfw show
ขั้นตอนที่ 2: เพิ่มกฎการส่งต่อพอร์ต (80 ถึง 8080)
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
หากคุณต้องการลบกฎไฟร์วอลล์ที่รันอยู่
sudo ipfw flush
(ที่มา )
นี่เป็นการเปลี่ยนแปลงชั่วคราวและจะคืนค่าเมื่อคุณรีบูทหรือล้างข้อมูลตามที่ระบุไว้ในบรรทัดสุดท้าย
คุณสามารถทำการเปลี่ยนแปลงแบบถาวรหรือคุณสามารถเพิ่มคำสั่งเป็นบรรทัดเริ่มต้นก่อนที่จะเริ่มต้นเซิร์ฟเวอร์ของคุณซึ่งอาจปลอดภัยกว่าจากมุมมองของความปลอดภัย
Authbind ได้รับการออกแบบมาโดยเฉพาะเพื่อให้โปรแกรมหนึ่งเข้าถึงพอร์ตระดับต่ำกว่าโดยไม่ต้องให้สิทธิ์เข้าถึงแบบเต็ม
มีพอร์ต OS X:
https://github.com/Castaglia/MacOSX-authbind
มันอาจยัง จำกัด การรับส่งข้อมูล IPv4 แต่คุณอาจต้องทำการตรวจสอบเพิ่มเติมเพื่อค้นหาว่าตรงกับความต้องการของคุณหรือไม่
launchd
.plist
... ` "ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]
Woohoo!
คุณสามารถใช้ncat
เพื่อส่งต่อปริมาณข้อมูลจากเว็บเซิร์ฟเวอร์ที่ทำงานบนพอร์ตอื่น:
sudo ncat -l -p 80 -c ' ncat -l -p 1234'
สิ่งนี้จะส่งต่อทราฟฟิกบนพอร์ต 80 ไปยังโลคัลโฮสต์: 1234 นี่เป็นบิตของกระบวย แต่ฉันจะไม่ใช้ที่ใดก็ได้นอกเหนือจากการทดสอบที่รวดเร็วและไม่ได้อยู่ในการผลิตแน่นอน
โปรดทราบว่าสิ่งนี้จะไม่อนุญาตให้กระบวนการที่ไม่ใช่รูทเข้าร่วม แต่โดยการเลือกพอร์ตที่กระบวนการสามารถเชื่อมโยงกับ 1234 ในตัวอย่างนี้มันจะดูเหมือนว่าถูกผูกไว้กับพอร์ต 80 การดำเนินการเทียบเท่า การส่งต่อพอร์ต 80 ไปยังพอร์ต 1234 ด้วยไฟร์วอลล์ แต่เป็นการชั่วคราวมากขึ้น
ncat
มาพร้อมกับnmap
ที่สามารถติดตั้งผ่านทางพอร์ต Mac sudo port install nmap
กับ MacPorts ตัวเองสามารถติดตั้งจากmacports.org/install.php
คุณยังสามารถใช้ ssh เพื่อทำการส่งต่อพอร์ต ดังนั้นหากคุณมีเซิร์ฟเวอร์ที่ทำงานบน 8080 คุณสามารถส่งต่อทราฟฟิกจากพอร์ต 80 ต่อไปนี้เป็นสคริปต์ที่ฉันใช้ซึ่งจะหยุดการทำงานของเนทีฟเนทีฟหากเซิร์ฟเวอร์นั้นทำงานและส่งต่อข้อมูล:
forward8080to80.command:
echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080
สิ่งที่คุณควรทำคือเปิดพอร์ต 80 บนเราเตอร์ของคุณแล้วชี้ไปยังที่อยู่ IP ในเครื่องของเว็บเซิร์ฟเวอร์ของคุณ จากนั้นใน Mac ของคุณเปิดใช้งาน Web Sharing จากบานหน้าต่างการตั้งค่าระบบ> การตั้งค่าการแชร์และชี้ไปที่ไดเรกทอรีที่คุณเลือก สิ่งนี้ได้ผลสำหรับฉันในอดีตจนกระทั่งสลับไปยังเซิร์ฟเวอร์ 10.6