Frage Warum erstellt sshd (openssh) zwei Prozesse pro Verbindung?


vor dem Login:

$ 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

nach dem 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

Für was sind die zwei Prozesse?

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

Vielen Dank,


25
2018-04-01 02:03


Ursprung




Antworten:


Privilegientrennung - ein Prozess, der root-Privilegien behält, um Dinge zu tun, die nur root machen kann, und eine andere, die alles andere tut.

Zu der Zeit, als diese Frage gestellt wurde, wurde die Privilegientrennung durch eine Option in sshd_config, und das sshd_config Man Seite erklärte, wofür es war. Privilege Separation wurde obligatorisch in Version 7.5, so dass die Option und ihre Dokumentation weg sind. Ich weiß nicht mehr, wo die kanonische Dokumentation der Privilegientrennungsfunktion zu finden ist, falls eine solche Dokumentation existiert.

Die letzte Version des Man-Page-Elements vor dem Entfernen sagte:

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.

38
2018-04-01 02:15



Danke für den Zeiger, nachdem ich es genauer betrachtet habe, sieht es so aus, als würden 3 Prozesse während der Anmeldung erstellt, einer im privilegierten Modus, einer im nicht privilegierten "sshd" Benutzer, nachdem die Authentifizierung beendet wurde, wurde dieser unprivilegierte Prozess beendet und ein neuer sshd-Prozess, der unter dem Anmeldenamen erstellt wurde. Gibt es irgendwo das im Detail, z.B. die Wechselwirkungen zwischen diesen Prozessen? Vielen Dank. - wei
@wei, ja, es ist in dokumentiert BXR.SU/OpenBSD/usr.bin/ssh/sshd.c. Wenn Sie suchen forkDu wirst feststellen, dass es einmal benutzt wurde privsep_preauth() und wieder rein privsep_postauth(). - cnst
@cnst danke! - wei
@WumpusQWumbley, der angegebene Link scheint keinen Abschnitt über UsePrivilegeSeparation zu enthalten. Der einzige Hinweis auf die Privilegientrennung ist unten im Abschnitt Credits. Fehle ich etwas? :) - Sorin Postelnicu
@SorinPostelnicu Du bist nicht, aber es scheint, dass das OpenBSD-Projekt jegliche Dokumentation von privsep fehlt. - Wumpus Q. Wumbley