ทำไม sshd (openssh) สร้างสองกระบวนการต่อการเชื่อมต่อ


26

ก่อนเข้าสู่ระบบ:

$ ps -elf | grep sshd
5 S root     26135     1  0  80   0 - 13115 ?      17:26 ?        00:00:00 /usr/sbin/sshd
0 S test     26480 21337  0  80   0 -  4154 -      18:41 pts/27   00:00:00 grep --colour=auto sshd

หลังจากเข้าสู่ระบบ:

$ ps -elf | grep sshd
5 S root     26135     1  0  80   0 - 13115 ?      17:26 ?        00:00:00 /usr/sbin/sshd
4 S root     26577 26135  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test [priv] 
5 S test     26582 26577  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test@pts/30 
0 S test     26653 21337  0  80   0 -  4155 -      18:42 pts/27   00:00:00 grep --colour=auto sshd

กระบวนการทั้งสองนั้นมีไว้เพื่ออะไร

4 S root     26577 26135  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test [priv] 
5 S test     26582 26577  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test@pts/30

ขอบคุณ

คำตอบ:


39

การแยกสิทธิพิเศษ - หนึ่งกระบวนการที่รักษาสิทธิ์ของรูทเพื่อทำสิ่งที่รูททำได้เท่านั้นและอีกอันที่ทำทุกอย่างอื่น

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

เวอร์ชันล่าสุดของรายการ man page ก่อนการลบกล่าวว่า:

UsePrivilegeSeparation
        Specifies whether sshd(8) separates privileges by creating an
        unprivileged child process to deal with incoming network traffic.
        After successful authentication, another process will be created
        that has the privilege of the authenticated user.  The goal of
        privilege separation is to prevent privilege escalation by con-
        taining any corruption within the unprivileged processes.  The
        argument must be yes, no, or sandbox.  If UsePrivilegeSeparation
        is set to sandbox then the pre-authentication unprivileged
        process is subject to additional restrictions.  The default is
        sandbox.

ขอบคุณสำหรับตัวชี้หลังจากที่ฉันดูอย่างใกล้ชิดมันดูเหมือนว่ามี 3 กระบวนการที่สร้างขึ้นในระหว่างการเข้าสู่ระบบหนึ่งทำงานในโหมดสิทธิพิเศษหนึ่งทำงานในผู้ใช้ "sshd" unprivileged หลังจากการรับรองความถูกต้องกระบวนการนี้ unprivileged ถูกฆ่าและ กระบวนการ sshd ใหม่ที่สร้างขึ้นภายใต้ชื่อเข้าสู่ระบบ มีการบันทึกรายละเอียดไว้ที่ใดบ้างเช่นการโต้ตอบระหว่างกระบวนการเหล่านี้หรือไม่ ขอบคุณ
wei

4
@wei ใช่ก็บันทึกไว้ในBXR.SU/OpenBSD/usr.bin/ssh/sshd.c หากคุณค้นหาforkคุณจะพบว่ามันใช้ครั้งเดียวในและอีกครั้งในprivsep_preauth() privsep_postauth()
cnst

@WumpusQWumbley ลิงก์ที่ให้ไว้ดูเหมือนจะไม่มีส่วนใด ๆ เกี่ยวกับ UsePrivilegeSeparation การอ้างอิงถึงการแยกสิทธิพิเศษอยู่ที่ด้านล่างในส่วนเครดิต ฉันพลาดอะไรไปรึเปล่า? :)
Sorin Postelnicu

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