Pourquoi sshd (openssh) crée-t-il deux processus par connexion?

26

avant la connexion:

$ 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

après la connexion:

$ 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

À quoi servent les deux processus?

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

Merci,

wei
la source

Réponses:

39

Séparation des privilèges - un processus qui conserve les privilèges root pour faire des choses que seul root peut faire, et un autre qui fait tout le reste.

Au moment où cette question a été posée, la séparation des privilèges était contrôlée par une option dans sshd_configet la sshd_configpage de manuel expliquait à quoi elle servait. La séparation des privilèges est devenue obligatoire dans la version 7.5 , de sorte que l'option et sa documentation ont disparu. Je ne sais plus où trouver la documentation canonique de la fonction de séparation des privilèges, si une telle documentation existe.

La dernière version de l'élément de page de manuel avant la suppression indiquait:

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.

la source
Merci pour le pointeur, après l'avoir regardé de plus près, il semble qu'il y ait 3 processus créés lors de la connexion, un s'exécutant en mode privilégié, un s'exécutant en utilisateur "sshd" non privilégié, une fois l'authentification terminée, ce processus non privilégié a été tué et un nouveau processus sshd créé sous le nom de connexion. Y a-t-il quelque part qui documente cela en détail, par exemple les interactions entre ces processus? Merci.
wei
4
@wei, oui, c'est documenté dans BXR.SU/OpenBSD/usr.bin/ssh/sshd.c . Si vous recherchez fork, vous trouverez qu'il est utilisé une fois dans privsep_preauth()et à nouveau en privsep_postauth().
1er
@WumpusQWumbley, le lien fourni ne semble pas contenir de section sur UsePrivilegeSeparation. La seule référence à la séparation des privilèges se trouve en bas, dans la section des crédits. Suis-je en train de manquer quelque chose? :)
Sorin Postelnicu
1
@SorinPostelnicu Vous ne l'êtes pas, mais il semble que le projet OpenBSD manque de documentation sur privsep.