Protegendo túneis SSH

Protegendo túneis SSH

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 ForceCommanddiretiva para /bin/falseimpedir o acesso ao shell.

informação relacionada