
Temos uma aplicação que usa SSH para se conectar a um servidor: o tráfego de rede da aplicação (banco de dados, alguns protocolos TCP personalizados, etc...) é encapsulado através de uma conexão SSH.
Usamos um par de chaves e uma conta sem privilégios no servidor, mas os usuários ainda podem usar sua chave para fazer login no servidor ou fazer qualquer redirecionamento de porta que desejarem.
Existe uma maneira de configurar o servidor SSH para permitir apenasalgunstúneis (restritos ao endereço final e porta dos túneis) e desabilitar o acesso ao shell? (usamos OpenSSH)
[editar]
eu me depareiEste artigo, parece que remover o acesso ao shell não é suficiente. Título e descrição alterados de acordo.
Responder1
No seu arquivoauthorized_keys você pode especificar qual comando será executado quando eles fizerem login. Você pode simplesmente definir esse comando para executar algo que irá esperar por muito tempo. O homem sshdpáginacomo uma lista de todas as opções que você pode usar em seu arquivoauthorized_keys.
permitopen="tsserver.example.org:3389",no-pty,no-agent-forwarding,no-X11-forwarding,command="/usr/local/stm_shell.sh" ssh-rsa AAAAB3....
Meu stm_shell.sh é este (também impõe um tempo limite de 12 horas). Não tenho 100% de certeza se isso é totalmente seguro.
#!/bin/bash
# send a hang-up after this process exits
shopt -s huponexit
# maximum session length in hours
CONNECT_TIME=12
sleep $[CONNECT_TIME*60]
kill $PPID
Responder2
Definir o shell do usuário como /bin/false pode fazer o que você está procurando.
Responder3
Talvez a palavra-chave "ChrootDirectory" no sshd_config (man sshd_config) possa fornecer um pouco mais de segurança extra.
Responder4
Eu acredito que você poderia definir a ForceCommand
diretiva para /bin/false
impedir o acesso ao shell.