É possível executar o sshd como um usuário normal?

33

Estou com o objetivo de iniciar uma segunda sshd instância em uma porta sem privilégios (por exemplo, 2222) com meu próprio arquivo de configuração.

Obviamente, o processo sshd não pode setuid , portanto, fazer login como usuários que não sejam aquele que está executando o daemon sshd é claramente impossível.

No entanto, é possível ter um daemon sshd em funcionamento que funcione para o usuário atualmente em execução? Para meu caso de uso, isso seria ótimo.

Eu tentei inicializar uma instância de sshd com meu próprio arquivo de configuração e chave de host e o processo sshd foi iniciado (sem reclamações sobre não ser raiz, como alguns comandos), no entanto, quando tento conectar a essa porta , o processo sshd morre.

$ /usr/sbin/sshd -dD -h .ssh/id_rsa -p 2222 
debug1: sshd version OpenSSH_5.6p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-dD'
debug1: rexec_argv[2]='-h'
debug1: rexec_argv[3]='.ssh/id_rsa'
debug1: rexec_argv[4]='-p'
debug1: rexec_argv[5]='2222'
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
debug1: Bind to port 2222 on ::.
Server listening on :: port 2222.
debug1: fd 6 clearing O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 6 out 6 newsock 6 pipe -1 sock 9
debug1: inetd sockets after dupping: 5, 5
Connection from ::1 port 57670
debug1: Client protocol version 2.0; client software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: list_hostkey_types: 
No supported key exchange algorithms
debug1: do_cleanup
debug1: do_cleanup
debug1: audit_event: unhandled event 12

A linha debug1: setgroups() failed: Operation not permitted obviamente se destaca, mas não morre até tentar aceitar uma conexão.

    
por Bo Jeanes 27.12.2011 / 04:26

4 respostas

31

Depois de um pouco de pesquisa, descobri.

Inicie o processo com sshd -f ~/.ssh/sshd_config , em que /.ssh/sshd_config é um novo arquivo criado por você. Entre outras opções (como uma chave de host diferente, porta diferente, etc) você precisa adicionar a linha UsePrivilegeSeparation no . Isso impedirá que o processo sshd tente fazer chamadas setuid ou setgid e permita que ele continue sendo executado como usuário e aceite conexões como usuário.

EDIT: Alguns momentos depois de descobrir isso alguém twittou este link para mim, o que confirma esta é a maneira correta de fazer isso: link

    
por 27.12.2011 / 05:03
3

Como uma atualização para este segmento, o OpenSSH na versão 7.5 preteriu a opção UsePrivilegeSeparation, tornando impossível desativar a separação de privilégios. Parece que a execução do SSHD como usuário agora é impossível.

Veja o link

    
por 12.07.2017 / 22:17
1

Eu verifiquei em detalhes a possibilidade de executar o serviço sshd como um usuário normal. Detalhe da versão do programa:

sshd version OpenSSH_7.4, OpenSSL 1.0.2k

Finalmente, depois de resolver muitos erros, cheguei a um ponto em que o SSHD foi abortado com o seguinte erro:

Attempt to write login records by non-root user (aborting)

Eu verifiquei o código-fonte para ver se é possível resolver o problema sem alterar o código-fonte. Veja o código aqui . Alguma parte do código que causa o aborto do programa:

#ifndef HAVE_CYGWIN
    if (geteuid() != 0) {
        logit("Attempt to write login records by non-root user (aborting)");
        return (1);
    }
#endif

Ele verifica o privilégio de usuário por (geteuid() != 0) e causa o problema aqui.

    
por 22.02.2018 / 19:42
0

Assumindo o que o @magiclantern observou acima e supondo que você não queira corrigir sshd , algo como Dropbear funciona para você? Ele é usado em muitos dispositivos incorporados que desejam um servidor ssh com espaço menor (e menos recursos / configurações).

    
por 11.05.2018 / 00:55