Por que vejo duas linhas no fstat para o mesmo soquete / porta?

1

Visto no OpenBSD 6.1:

Quando eu faço um fstat | grep internet no meu servidor openbsd (192.168.102.128), tenho o seguinte resultado:

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

Eu tenho uma conexão SSH usando minha conta jrx de um host 192.168.102.67, então eu entendo a primeira linha.

Mas por que há esta segunda linha com a conta root fazendo sshd (como processo 69801) do mesmo socket, e da mesma porta de cliente?

É uma configuração especial do meu cliente SSH no lado do cliente? (Eu uso putty no lado do cliente)

EDITAR : em Absoluta OpenBSD 2a Edição , você vê apenas uma linha de conexão, não duas.

    
por Jérôme Radix 25.08.2017 / 14:56

1 resposta

0

Isso é o que eu esperaria. Para escutar em uma porta privilegiada, um processo deve estar em execução com privilégio de root. Mas, quando um usuário está conectado, queremos que esse processo esteja sendo executado com os privilégios do usuário conectado. Se o processo do servidor simplesmente abandonasse seus privilégios, ele não seria capaz de atender a uma solicitação de um usuário diferente. Há também o problema de que o servidor deve manipular várias conexões simultaneamente. Então, o que acontece é que o servidor (em execução como root) escuta no soquete até que um usuário se conecte, então, para permitir que ele manipule outras solicitações e seja executado com o nível de privilégio correto, ele bifurca, criando duas instâncias. Uma instância volta a escutar conexões, a outra muda para o usuário menos privilegiado. Ambos têm uma cópia da alça que faz referência à conexão do soquete.

Se o processo fechar o socket, então, ao contrário de 2 processos falando com o mesmo arquivo, a conexão será perdida.

    
por 25.08.2017 / 16:16