¿Cómo permitir que SSH entre, pero no la transferencia de archivos, en un servidor Linux?

¿Cómo permitir que SSH entre, pero no la transferencia de archivos, en un servidor Linux?

Tengo un servidor Linux (Ubuntu 16.04) donde ejecuto algunas simulaciones. Me gustaría darle a un empleado acceso a este servidor para que pueda probar su código (accedería a él de forma remota, desde su computadora personal), pero no permitirle descargar ningún archivo del servidor a su sistema.

Los archivos son bastante grandes (varios GB), por lo que no me preocupa que copie y pegue todo el contenido del archivo manualmente en su computadora.

Entonces, ¿cómo le permito el acceso SSH, pero no le permito el acceso SCP/WinSCP?

Respuesta1

No estoy seguro de que puedas hacer eso si realmente quieren eliminar los datos. Es posible que puedas evitar la ejecución scpde o sftp, pero aún quedan muchas otras formas de transferir archivos.

Primero, el protocolo de transferencia de archivos realmente simple es este:

ssh user@hostname 'cat /some/remote/file' > /some/local/path

Y puedes reemplazarlo catcon casi cualquier programa, diablos, incluso cp somefile /dev/stdoutparece funcionar.

En los comentarios hubo sugerencias sobre cómo desconectar sesiones después de un tiempo determinado o después de una determinada cantidad de datos transferidos. Eso parece funcionar en la superficie, si también limitas la cantidad de conexiones que el usuario puede realizar. Permitir 10 conexiones al día, con un límite de 1 MB/conexión, los limitaría a mover apenas 10 MB. Quizás algo así podría funcionar si el uso normal previsto requiere mucha menos transferencia de datos que el escenario no deseado.

¿Pero qué pasa si simplemente envían el archivo a otro lugar? Debería ser fácil configurar un servidor SSH/FTP/lo que sea en otro lugar y enviar el archivo a través de él. O a través de HTTP(S), al menos curltiene opciones como --data @filenamey --upload-file, y configurar el lado del servidor no debería ser difícil. Si elimina las herramientas ya existentes, ¿qué pasa si el programa que ejecutan en el sistema envía los datos mientras los procesa o en lugar de procesarlos?


Lo que tendría que hacer es limitar lo que el programa que tiene acceso a los datos puede hacer con algún tipo de caja de arena.

Haga arreglos para que el código se ejecute en una máquina virtual que no tenga acceso al exterior, aparte de alguna interfaz para cargar el código y descargar los resultados, con controles apropiados para lo que se acepta como una carga válida y un resultado válido. O usar algo comoseccomppara limitar lo que el código puede hacer.

Respuesta2

puedes editar /etc/ssh/sshd_config a lo siguiente

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

y elimine scp del servidor y también elimine el acceso sudo a su cuenta. puede volver a agregar scp según sea necesario.

cortesía de las respuestas de Brad y Mike dehttps://serverfault.com/questions/28858/es-es-posible-prevenir-scp-mientras-aún-permite-el-acceso-ssh

información relacionada