sshd
Meu objetivo é iniciar uma segunda instância em uma porta não privilegiada (por exemplo, 2222) com meu próprio arquivo de configuração.
Obviamente, o sshd
processo não pode fazer setuid
login como usuários que não sejam o que está executando o sshd
daemon, é claramente impossível.
No entanto, é possível ter um sshd
daemon que funcione para o usuário em execução no momento? Para o meu caso de uso, isso seria bom.
Tentei inicializar uma sshd
instância com meu próprio arquivo de configuração e chave do host, e o sshd
processo é iniciado (sem queixas sobre não ser root, como alguns comandos); no entanto, quando tento conectar-me a essa porta, o sshd
processo 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 debug1: setgroups() failed: Operation not permitted
linha obviamente se destaca, mas não morre até tentar aceitar uma conexão.
UsePam
parano
.Como uma atualização para esse encadeamento, o OpenSSH na versão 7.5 reprovou 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.
Consulte https://www.openssh.com/releasenotes.html
fonte
Eu verifiquei em detalhes a possibilidade de executar o serviço sshd como um usuário normal. Detalhe da versão do programa:
Finalmente, depois de resolver muitos erros, cheguei a um ponto em que o SSHD abortou com o seguinte erro:
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:
Ele verifica o privilégio do usuário
(geteuid() != 0)
e aqui causa o problema.fonte
Assumindo o que a @magiclantern observou acima e supondo que você não deseja corrigir
sshd
, algo como o Dropbear funciona para você? É usado em muitos dispositivos incorporados que desejam um servidor ssh com tamanho menor (e menos recursos / configurações).fonte
Aqui está um userland bash sript baseado na resposta de Jean Jean:
fonte