Tại sao sshd (openssh) tạo hai quy trình cho mỗi kết nối?


26

trước khi đăng nhập:

$ 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

sau khi đăng nhập:

$ 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

Hai quá trình để làm gì?

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

Cảm ơn,

Câu trả lời:


39

Phân tách đặc quyền - một quy trình giữ lại các đặc quyền gốc để thực hiện những việc mà chỉ root mới có thể làm và một quy trình khác thực hiện mọi thứ khác.

Tại thời điểm câu hỏi này được hỏi, sự phân tách đặc quyền được kiểm soát bởi một tùy chọn sshd_configsshd_configtrang người đàn ông đã giải thích nó dùng để làm gì. Việc tách đặc quyền trở thành bắt buộc trong phiên bản 7.5 , do đó tùy chọn và tài liệu của nó không còn nữa. Tôi không còn biết nơi tìm tài liệu chính tắc của tính năng phân tách đặc quyền, nếu có bất kỳ tài liệu nào như vậy tồn tại.

Phiên bản cuối cùng của mục người đàn ông trước khi xóa cho biết:

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.

Cảm ơn con trỏ, sau khi tôi xem xét kỹ hơn, có vẻ như có 3 quy trình được tạo trong quá trình đăng nhập, một chạy trong chế độ đặc quyền, một chạy trong người dùng "sshd" không được ưu tiên, sau khi xác thực kết thúc, quá trình không được ưu tiên này đã bị giết và một quá trình sshd mới được tạo dưới tên đăng nhập. Có nơi nào ghi lại điều này một cách chi tiết, ví dụ như sự tương tác giữa các quá trình này không? Cảm ơn.
wei

4
@ Vâng, vâng, nó được ghi lại trong BXR.SU/OpenBSD/usr.bin/ssh/sshd.c . Nếu bạn tìm kiếm fork, bạn sẽ thấy rằng nó được sử dụng một lần privsep_preauth()và một lần nữa privsep_postauth().
cnst

@WumpusQWumbley, liên kết được cung cấp dường như không chứa bất kỳ phần nào về UsePriv đặc biệt. Tham chiếu duy nhất để phân tách đặc quyền là ở dưới cùng, trong phần tín dụng. Tui bỏ lỡ điều gì vậy? :)
Sorin Postelnicu

1
@SorinPostelnicu Bạn không phải, nhưng có vẻ như dự án OpenBSD đang thiếu bất kỳ tài liệu nào về quyền riêng tư.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.