ทำไม 1024 พอร์ตแรกที่ จำกัด เฉพาะผู้ใช้รูทเท่านั้น?


53

นี่เป็นความอยากรู้ที่ไม่ได้ใช้งานมากกว่าสิ่งอื่นใด เพื่อนของฉันคนหนึ่งถามฉันว่า 'ช่วงพอร์ตใดที่รูทเดียวที่สามารถใช้งานได้ใน Linux' ฉันบอกเขาว่า 0-1024 ถูก จำกัด จากนั้นเขาก็ถามฉันว่าทำไมมันถึงเป็นเช่นนั้นและ ... ฉันตกอยู่ในความสูญเสีย ไม่มีความคิดใด ๆ

มีเหตุผลว่าทำไมพอร์ตเหล่านี้ถูก จำกัด และ 1025-65535 ไม่?

บริการเครือข่ายที่สำคัญที่สุด (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP, ฯลฯ ) อยู่ในช่วงนี้ดังนั้นคำตอบที่เป็นไปได้ฉันคิดว่า:

  • ผู้ใช้ที่ไม่น่าเชื่อถือสามารถเรียกใช้โปรแกรมที่ฟังพอร์ตเหล่านี้เพื่อดูรายละเอียดการเข้าสู่ระบบ
  • ผู้ใช้ที่ไม่น่าเชื่อถือสามารถเรียกใช้แอปพลิเคชันเซิร์ฟเวอร์ที่ไม่ได้รับอนุญาต

ทุกคนสามารถหลั่งน้ำตาแสงที่นี่?

คำตอบ:


52

สมมติว่าคุณกำลังแลกเปลี่ยนข้อมูลกับคอมพิวเตอร์บนพอร์ต <1024 และคุณรู้ว่าคอมพิวเตอร์กำลังใช้งานยูนิกซ์หลายรุ่น จากนั้นคุณจะรู้ว่าบริการที่ทำงานบนพอร์ตนั้นได้รับการอนุมัติจากผู้ดูแลระบบ: มันทำงานเหมือนรูทหรืออย่างน้อยก็ต้องเริ่มเป็นรูท

ในโลกกว้างของอินเทอร์เน็ตมันไม่สำคัญอะไร เซิร์ฟเวอร์ส่วนใหญ่ดูแลโดยบุคคลเดียวกันกับบริการที่ใช้งานอยู่ คุณจะไม่ไว้วางใจรากมากกว่าผู้ใช้รายอื่น

ด้วยเครื่องที่มีผู้ใช้หลายคนโดยเฉพาะในเครือข่ายท้องถิ่นสิ่งนี้อาจสำคัญ ตัวอย่างเช่นในวันก่อนการเข้ารหัสพลเรือนวิธีที่นิยมใช้คำสั่งเชลล์ในเครื่องอื่นคือrsh( r emote sh ell); คุณสามารถใช้การพิสูจน์ตัวตนด้วยรหัสผ่านหรือคุณสามารถพิสูจน์ตัวตนเพียงแค่พิสูจน์ว่าคุณคือผู้ใช้ X บนเครื่อง A (โดยที่เครื่อง B รู้ว่า X @ A สามารถเข้าสู่ระบบในฐานะ X @ B โดยไม่มีรหัสผ่าน) จะพิสูจน์ได้อย่างไร? rshลูกค้าเป็นราก setuid และใช้หมายเลขพอร์ต <1024 เพื่อให้เซิร์ฟเวอร์รู้ว่าลูกค้าจะได้พูดคุยกับเป็นที่น่าเชื่อถือและจะไม่โกหกเป็นที่ผู้ใช้จะถูกเรียกใช้มัน ในทำนองเดียวกันNFS ได้รับการออกแบบให้มีความโปร่งใสเกี่ยวกับผู้ใช้และการอนุญาตดังนั้นการกำหนดค่าทั่วไปคือบนเครือข่ายท้องถิ่นทุกเครื่องใช้ฐานข้อมูลผู้ใช้เดียวกันและผู้ใช้ N ที่ A ระบบไฟล์ที่ติดตั้งจากเซิร์ฟเวอร์ B จะได้รับสิทธิ์ของผู้ใช้ N ที่ B ข้อเท็จจริงที่ว่าไคลเอนต์ NFS นั้นมาจากหมายเลขพอร์ต <1024 พิสูจน์ว่ารูทที่ A ได้ตรวจสอบไคลเอนต์ NFS ซึ่งควรตรวจสอบให้แน่ใจว่าถ้ามันส่งคำขอที่อ้างว่ามาจากผู้ใช้ N แล้วคำขอนั้นคือ จากผู้ใช้ N

ผู้ใช้ที่ไม่ได้รับอนุญาตจะไม่สามารถเรียกใช้เซิร์ฟเวอร์บนพอร์ตที่ต่ำเป็นประโยชน์อีกอย่างหนึ่ง แต่ไม่ใช่ประโยชน์หลัก ย้อนกลับไปในอดีตการปลอมแปลงเป็นสิ่งที่ค่อนข้างแปลกใหม่และผู้ใช้ที่ใช้งานเซิร์ฟเวอร์การปลอมแปลงจะได้รับการจัดการอย่างรวดเร็วโดยผู้ดูแลระบบที่ระมัดระวัง


2
ถ้างั้นการพิสูจน์ตัวตนของคนจนนั้นเป็นอย่างไร อนุสัญญานี้มีประโยชน์จริง ๆ ในระบบปฏิบัติการ * เหมือนใหม่หรือไม่?
Andrew Lambert

2
@ ประหลาดใจ: โลกยูนิกซ์อนุรักษ์นิยมดังนั้นคำถามที่ถามคือ"มันทำให้เกิดปัญหาจริงหรือไม่?" (และควรตอบด้วยความรู้เต็มว่าการทำงานที่คุ้มค่าทุกครั้งมีอาร์กิวเมนต์บรรทัดคำสั่งเพื่อเปลี่ยนพอร์ต)
dmckee

5
@dmckee อาจเป็นที่ถกเถียงกันอยู่ว่าการออกแบบดังกล่าวนำไปสู่เซิร์ฟเวอร์ที่ทำงานเป็นรูทมากขึ้นแม้ว่าจะมีตัวเลือกในการทำงานบนพอร์ตอื่น
Andrew Lambert

5
@ ประหลาดใจมันยังคงมีประโยชน์ในบางครั้งในวันนี้บนเครือข่ายท้องถิ่น ฉันไม่คิดว่ามันจะนำไปสู่เซิร์ฟเวอร์อื่น ๆ ที่ทำงานในฐานะรูทบริการสามารถผูกพอร์ตจากนั้นปล่อยสิทธิพิเศษหรือใช้ความสามารถถ้ามีหรือผู้ดูแลระบบสามารถเปลี่ยนเส้นทางพอร์ตในการกำหนดค่าไฟร์วอลล์ ฉันไม่คิดว่ามันจะถูกนำมาใช้ถ้ายูนิกซ์ได้รับการออกแบบในวันนี้ แต่มันไม่เจ็บ
Gilles 'หยุดความชั่วร้าย'

1
เรื่องไร้สาระนี้ควรหายไปนานจากเคอร์เนล หมายเลขพอร์ตไม่ควรมีความหมายพิเศษใด ๆ "การใช้เหตุผล" ที่อยู่เบื้องหลังการออกแบบนั้นล้าสมัยไปนาน (ฉันคิดว่ามันเป็นความขัดแย้งแม้ในเวลาที่ออกแบบ) แต่สิ่งที่แย่กว่านั้นคือความคิดของช่วงหมายเลขพิเศษใด ๆ ที่ "น่าเชื่อถือ" นั้นเป็นนัย เว็บเซิร์ฟเวอร์จะต้องถูกเรียกใช้งานในฐานะรูทเพื่อให้บริการหน้าเว็บ การหาช่องโหว่เพียงครั้งเดียวและเซิร์ฟเวอร์หลุมหายไป และเพื่ออะไร สำหรับการออกแบบดั้งเดิมที่ไม่เคยใช้งานได้เลยแม้แต่น้อย
masi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.