
Tenemos una aplicación que utiliza SSH para conectarse a un servidor: el tráfico de red de la aplicación (base de datos, algunos protocolos TCP personalizados, etc.) se canaliza a través de una conexión SSH.
Usamos un par de claves y una cuenta sin privilegios en el servidor, pero los usuarios aún pueden usar su clave para iniciar sesión en el servidor o realizar cualquier redirección de puerto que deseen.
¿Hay alguna manera de configurar el servidor SSH para permitir soloalgunotúneles (restringidos a la dirección final y el puerto de los túneles) y deshabilitar el acceso al shell? (usamos OpenSSH)
[editar]
Me encontré conEste artículo, parece que eliminar el acceso al shell no es suficiente. Se modificó el título y la descripción en consecuencia.
Respuesta1
En su archivo autorizado_keys puede especificar qué comando se ejecutará cuando inicien sesión. Simplemente puede configurar ese comando para ejecutar algo que esperará durante mucho tiempo. el hombre sshdpáginacomo una lista de todas las opciones que puede usar en su archivo de claves_autorizadas.
permitopen="tsserver.example.org:3389",no-pty,no-agent-forwarding,no-X11-forwarding,command="/usr/local/stm_shell.sh" ssh-rsa AAAAB3....
Mi stm_shell.sh es este (también impone un tiempo de espera de 12 horas). No estoy 100% seguro de que esto sea completamente 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
Respuesta2
Configurar el shell del usuario en /bin/false puede hacer lo que estás buscando.
Respuesta3
Quizás la palabra clave "ChrootDirectory" en sshd_config (man sshd_config) pueda brindar un poco más de seguridad adicional.
Respuesta4
Creo que podría configurar la ForceCommand
directiva para /bin/false
evitar el acceso al shell.