为什么sshd(openssh)为每个连接创建两个进程?


26

登录前:

$ 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

登录后:

$ 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

这两个过程分别是什么?

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

谢谢,

Answers:


39

特权分离-一个进程保留root特权来执行只有root才能做的事情,而另一个进程则负责其他所有事情。

在问这个问题时,特权分离是由中的一个选项控制的sshd_configsshd_config手册页解释了它的用途。在7.5版中,特权分离成为必需的,因此该选项及其文档不见了。我不再知道在哪里可以找到特权分离功能的规范文档(如果有)。

删除之前的手册页项目的最新版本为:

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.

感谢您的指点,在我仔细研究了一下之后,发现登录时创建了3个进程,一个以特权模式运行,一个以非特权“ sshd”用户运行,身份验证完成后,这个非特权进程被杀死,在登录名下创建的新sshd进程。是否有任何地方对此进行了详细记录,例如这些流程之间的相互作用?谢谢。
2014年

4
@wei,是的,它记录在BXR.SU/OpenBSD/usr.bin/ssh/sshd.c中。如果您进行搜索fork,您会发现它在中privsep_preauth()一次又一次地被使用privsep_postauth()
cnst 2014年

@WumpusQWumbley,提供的链接似乎不包含有关UsePrivilegeSeparation的任何部分。唯一的特权分离参考位于“积分”部分的底部。我想念什么吗?:)
Sorin Postelnicu

1
@SorinPostelnicu您不是,但是看来OpenBSD项目缺少privsep的任何文档。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.