fstatで同じソケット/ポートに対して2行が表示されるのはなぜですか?

fstatで同じソケット/ポートに対して2行が表示されるのはなぜですか?

OpenBSD 6.1で見られるもの:

fstat | grep internet私のopenbsdサーバー(192.168.102.128)で実行すると、次の結果が表示されます。

jrx      sshd       87949    3* internet stream tcp 0x0 192.168.102.128:22 <-- 192.168.102.67:63857
root     sshd       69801    3* internet stream tcp 0x0 192.168.102.128:22 <-- 192.168.102.67:63857
_smtpd   smtpd      26906    8* internet6 stream tcp 0x0 [::1]:25
_smtpd   smtpd      26906    9* internet6 stream tcp 0x0 [fe80::1%lo0]:25
_smtpd   smtpd      26906   10* internet stream tcp 0x0 127.0.0.1:25
root     sshd       20185    3* internet stream tcp 0x0 *:22
root     sshd       20185    4* internet6 stream tcp 0x0 *:22
_syslogd syslogd    13823    4* internet dgram udp *:514
_syslogd syslogd    13823    5* internet6 dgram udp *:514
_dhcp    dhclient   62845    3* internet dgram udp *:0
_dhcp    dhclient   62845    9* internet raw ip 0x0
root     dhclient   90416    3* internet dgram udp *:0

私のアカウントjrxを使用してホスト192.168.102.67にSSH接続があるので、最初の行を理解します。

しかし、2行目のルートアカウントが同じソケットと同じクライアントポートでsshd(プロセス69801)を実行するのはなぜですか?

これはクライアント側のSSHクライアントの特別な構成ですか? (クライアント側ではパテを使用します)

編集する:存在する絶対OpenBSD第2版、2つではなく1つの接続線のみが表示されます。

答え1

これが私が期待していたものです。特権ポートでリッスンするには、プロセスをroot権限で実行する必要があります。ただし、ユーザーが接続されたら、接続するユーザーの権限でプロセスを実行したいと思います。サーバープロセスが単に権限を放棄すると、他のユーザーからの要求を処理できません。サーバーが同時に複数の接続を処理する必要があるという問題もあります。したがって、ルートとして実行されているサーバーは、ユーザーが接続するまでソケットでリッスンし、別の要求を処理し、正しい権限レベルで実行できるようにフォークして2つのインスタンスを作成します。あるインスタンスは再接続リスニング状態に戻り、もう一方のインスタンスは権限の低いユーザーに切り替えられます。どちらもソケット接続を参照するハンドルのコピーを持っています。

もし誰でもプロセスがソケットを閉じると、同じファイルで通信する2つのプロセスとは異なり、接続が切断されます。

関連情報