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

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

登录前:

$ 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

谢谢,

答案1

权限分离——一个进程保留 root 权限来执行只有 root 才能执行的操作,另一个进程执行其他所有操作。

在提出这个问题时,特权分离由 中的一个选项控制sshd_configsshd_config手册页解释了它的用途。特权分离在版本 7.5,因此该选项及其文档都消失了。我再也不知道在哪里可以找到特权分离功能的规范文档(如果有这样的文档的话)。

删除前的手册页项目的最后一个版本是这样的:

UsePrivilegeSeparation– 指定 sshd(8) 是否通过创建非特权子进程来处理传入的网络流量,从而分离权限。成功验证后,将创建另一个具有已验证用户权限的进程。权限分离的目标是通过将任何损坏包含在非特权进程中来防止权限提升。参数必须是yesnosandbox。如果UsePrivilegeSeparation 设置为sandbox,则预验证非特权进程将受到其他限制。默认值为 sandbox

相关内容