sshd(openssh)が接続ごとに2つのプロセスを作成するのはなぜですか?


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

2つのプロセスは何のためですか?

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

おかげで、

回答:


39

特権の分離-rootのみが実行できることを行うためにroot特権を保持するプロセスと、他のすべてを実行するプロセス。

この質問が行われた時点で、特権の分離はのオプションによって制御されsshd_configsshd_configmanページでその目的が説明されていました。バージョン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つのプロセスが作成され、1つは特権モードで実行され、1つは特権のない「sshd」ユーザーで実行され、認証が終了すると、この特権のないプロセスは強制終了され、ログイン名で作成された新しいsshdプロセス。これらのプロセス間の相互作用など、これを詳細に文書化する場所はありますか?ありがとう。
i 14

4
@wei、はい、それはBXR.SU/OpenBSD/usr.bin/ssh/sshd.cに文書化されています。あなたが検索した場合fork、あなたはそれがで一度使われていることを見つけることprivsep_preauth()でと再びprivsep_postauth()
cnst 14

@WumpusQWumbley、提供されたリンクにはUsePrivilegeSeparationに関するセクションが含まれていないようです。権限分離に関する唯一の参照は、クレジットセクションの下部にあります。何か不足していますか?:)
ソリンポステルニク

1
@SorinPostelnicuそうではありませんが、OpenBSDプロジェクトにはprivsepのドキュメントが欠けているようです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.