Mengapa sshd (openssh) membuat dua proses per koneksi?

26

sebelum masuk:

$ 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

setelah login:

$ 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

Untuk apa kedua proses itu?

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

Terima kasih,

wei
sumber

Jawaban:

39

Pemisahan hak istimewa - satu proses yang mempertahankan hak akses root untuk melakukan hal-hal yang hanya dapat dilakukan oleh root, dan proses lain yang melakukan segalanya.

Pada saat pertanyaan ini diajukan, pemisahan hak istimewa dikontrol oleh opsi di sshd_config, dan sshd_confighalaman manual menjelaskan untuk apa itu. Pemisahan hak istimewa menjadi wajib dalam versi 7.5 , sehingga opsi dan dokumentasinya hilang. Saya tidak lagi tahu di mana menemukan dokumentasi kanonik dari fitur pemisahan hak istimewa, jika ada dokumentasi semacam itu.

Versi terakhir dari item halaman manual sebelum dihapus mengatakan:

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.

sumber
Terima kasih untuk penunjuknya, setelah saya melihat lebih dekat, terlihat bahwa ada 3 proses yang dibuat saat login, satu berjalan dalam mode istimewa, satu berjalan dalam pengguna "sshd" yang tidak memiliki hak, setelah otentikasi selesai, proses yang tidak terprivasi ini terbunuh dan proses sshd baru yang dibuat dengan nama login. Apakah ada tempat untuk mendokumentasikan hal ini secara terperinci, misalnya interaksi antara proses-proses ini? Terima kasih.
wei
4
@ we, ya, ini didokumentasikan dalam BXR.SU/OpenBSD/usr.bin/ssh/sshd.c . Jika Anda mencari fork, Anda akan menemukan bahwa itu digunakan sekali dalam privsep_preauth()dan lagi privsep_postauth().
cnst
@WumpusQWumbley, tautan yang disediakan tampaknya tidak mengandung bagian apa pun tentang UsePrivilegeSeparation. Satu-satunya referensi untuk pemisahan hak istimewa adalah di bagian bawah, di bagian kredit. Apakah saya melewatkan sesuatu? :)
Sorin Postelnicu
1
@SorinPostelnicu Anda tidak, tetapi tampaknya proyek OpenBSD tidak memiliki dokumentasi privsep.