Perché sshd (openssh) crea due processi per connessione?


26

prima dell'accesso:

$ 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

dopo il 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

A cosa servono i due processi?

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

Grazie,

Risposte:


39

Separazione dei privilegi: un processo che conserva i privilegi di root per fare cose che solo root può fare e un altro che fa tutto il resto.

Al momento in cui è stata posta questa domanda, la separazione dei privilegi era controllata da un'opzione in sshd_config, e la sshd_configpagina man ha spiegato a cosa serviva. La separazione dei privilegi è diventata obbligatoria nella versione 7.5 , quindi l'opzione e la relativa documentazione sono sparite. Non so più dove trovare la documentazione canonica della funzione di separazione dei privilegi, se tale documentazione esiste.

L'ultima versione dell'elemento della pagina man prima della rimozione diceva:

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.

Grazie per il puntatore, dopo averlo esaminato più da vicino, sembra che ci siano 3 processi creati durante l'accesso, uno in esecuzione in modalità privilegiata, uno in esecuzione utente "sshd" senza privilegi, al termine dell'autenticazione, questo processo senza privilegi è stato ucciso e un nuovo processo sshd creato con il nome di accesso. Esiste da qualche parte documentarlo in dettaglio, ad esempio le interazioni tra questi processi? Grazie.
wei

4
@wei, sì, è documentato in BXR.SU/OpenBSD/usr.bin/ssh/sshd.c . Se cerchi fork, scoprirai che è usato una volta dentro privsep_preauth()e ancora dentro privsep_postauth().
primo

@WumpusQWumbley, il collegamento fornito non sembra contenere alcuna sezione su UsePrivilegeSeparation. L'unico riferimento alla separazione dei privilegi è in fondo, nella sezione crediti. Mi sto perdendo qualcosa? :)
Sorin Postelnicu,

1
@SorinPostelnicu Non lo sei, ma sembra che nel progetto OpenBSD manchi tutta la documentazione di privsep.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.