ฉันต้องการให้ syslog ทำงานเป็นผู้ใช้ที่ไม่ใช่รูทบนกล่อง linux ของฉัน นั่นทำให้มันเป็นไปไม่ได้ที่จะผูกกับพอร์ต 514 - เพราะนั่นเป็นพอร์ตที่มีสิทธิพิเศษ มีวิธีใดบ้างที่ฉันจะอนุญาตให้ผู้ใช้ที่ไม่ใช่ "admin" สามารถฟังพอร์ต 514 ได้?
ฉันต้องการให้ syslog ทำงานเป็นผู้ใช้ที่ไม่ใช่รูทบนกล่อง linux ของฉัน นั่นทำให้มันเป็นไปไม่ได้ที่จะผูกกับพอร์ต 514 - เพราะนั่นเป็นพอร์ตที่มีสิทธิพิเศษ มีวิธีใดบ้างที่ฉันจะอนุญาตให้ผู้ใช้ที่ไม่ใช่ "admin" สามารถฟังพอร์ต 514 ได้?
คำตอบ:
setcap 'cap_net_bind_service=+ep' /path/to/syslogd
ต้องการลินุกซ์เคอร์เนลที่ไม่โบราณ ( 2.6.24หรือใหม่กว่า)
คุณสามารถกำหนดค่าrinetd
(มีให้ใช้งานได้ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดที่เก็บมาตรฐานของการกระจาย) เพื่อฟังบนพอร์ต 514 และการเชื่อมต่อไปข้างหน้าไปยังพอร์ตอื่น (สูงกว่า 1024 กล่าวว่า 1514) วิธีนี้จะทำให้ผู้ใช้ที่ไม่ได้รับสิทธิพิเศษสามารถรับฟังบน 1,514 และrinetd
จะส่งต่อการเชื่อมต่อดังนั้นจึงดูเหมือนว่าจะรับฟังใน 514
สิ่งนี้จะใช้ได้กับการเชื่อมต่อ TCP เท่านั้น หากคุณต้องการสนับสนุน UDP (หรือสิ่งอื่นใด) ด้วยวิธีนี้เช่นเดียวกับหรือแทน TCP คุณสามารถใช้กฎการแปล iptables เพื่อให้ได้ผลเช่นเดียวกัน
เพิ่งพบการสนทนาที่ดีมากของที่นี่: /programming/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024- บน li
ดูไม่ง่ายเลย
ฟังบนพอร์ตที่ไม่มีสิทธิใช้งานและใช้ iptables dnat เพื่อเปลี่ยนเส้นทางการเชื่อมต่อ