¿Cómo darle a alguien un shell en mi red local sin riesgos de seguridad?

3

Tengo un servidor A en mi red local en mi casa. Quiero permitir que alguien venga a ese servidor utilizando una conexión ssh inversa de mi servidor a su servidor desde el cual puede acceder a mi servidor. No quiero que pueda ingresar a mi red local y que pueda iniciar sesión en otra computadora que no sea el servidor que le proporcioné. Por supuesto, no quiero que él pueda instalar ningún kit raíz o arruinar mis sistemas y servidores de manera que no pueda recuperarlos. ¿Es posible que le dé un directorio de inicio vacío para que trabaje dentro de ese directorio con Python y twitter API And vim y también pueda supervisar sus propios procesos y sus recursos y poder eliminar sus propios procesos? ¿Pero no puedo ir a ningún lugar fuera de ese directorio o instalar cosas o descubrir mi red local? También quiero saber si el registro de toda su actividad con pam es confiable.

Mi único requisito para el usuario es: pudiendo usar vim, sesión de python3 interactiva (el usuario solo necesita un puñado de bibliotecas seguras), ejecutando códigos python3 (el usuario solo necesita un puñado de bibliotecas seguras), y poder usar todo el ancho de banda (solo para el sitio web de Twitter), cpu (aal cores) y recursos de memoria del servidor.

    
pregunta yukashima huksay 10.01.2018 - 18:04
fuente

4 respuestas

5
  

... ¿le das a alguien un shell en mi red local sin riesgos de seguridad?

Dont

En lugar de intentar restringir el acceso de shell de este usuario, recomendaría un enfoque completamente diferente.

  • Compra un segundo enrutador
  • conecte el internet del nuevo enrutador al puerto de registro de su enrutador existente
  • puerto de reenvío de puertos 22 del enrutador existente al nuevo enrutador
  • puerto de reenvío de puertos 22 del nuevo enrutador al servidor
  • configure el acceso SSH para este usuario no confiable en el servidor
  • restringe el servidor a twitter / developer / tu ip externa a través del nuevo enrutador

este método es mucho más seguro / confiable que un shell inverso este método le permite al desarrollador usar su conexión externa sin tener acceso a nada en su red (siempre y cuando no pueda explotar el nuevo enrutador ... y usted puede controlar su tráfico para asegurarse de que no está intentando piratearlo) este método no requiere estar parado mientras se le da una palmadita a la campana para bloquear un entorno de desarrollo y al mismo tiempo permitir que el desarrollador haga su trabajo.

Dicho esto, si tiene elementos existentes en el servidor que desea proteger de este usuario ... Haría una copia completa del disco duro del servidor antes de permitirles tener acceso ... y luego borrarlo y restaurar a partir de una copia de seguridad una vez que se hayan realizado.

El acceso físico es el acceso de root, y aunque técnicamente no le está dando a este desarrollador acceso físico ... el acceso al shell es muy parecido a lo mismo. Si un pirata informático obtiene acceso de shell a un usuario sin privilegios ... es una práctica habitual atacar desde la órbita ... la única manera de estar seguro.

    
respondido por el CaffeineAddiction 10.01.2018 - 20:18
fuente
2

Todo lo anterior es posible. Yo sugeriría -

  • Crea un usuario con permisos mínimos. Explicar todo esto está fuera del alcance de este intercambio de pila: busque algo como falla del servidor si necesita ayuda. Esto se vuelve más difícil si desea restringir el acceso a los archivos que de otra manera se pueden leer / escribir / ejecutar para todos los usuarios.
  • Cree un shell restringido: vea aquí .
  • Asegúrese de que PAM registre todo "se requiere una sesión pam_tty_audit.so enable = *"
  • Para ver los procesos "top -U [nombre de usuario]" o "ps -u [nombre de usuario]".

Sin embargo, hay un problema importante aquí. Pitón. Si el usuario puede usar python, puede llamar a ejecutables a través de eso. Se podría intentar alguna mitigación usando algo como PyPy de espacio aislado .

Al decir esto, aún deberían tener acceso de lectura a los archivos del sistema y estar restringidos según los permisos de usuario del sistema operativo. Más allá de lo habitual "asegúrese de que su sistema esté completamente actualizado y que no tenga ningún script / ejecutable que se ejecute como usuario privilegiado y que pueda escribirlo cualquier usuario", el riesgo debería ser mínimo.

    
respondido por el Hector 10.01.2018 - 18:27
fuente
2

No creo que sea una buena idea. La forma más adecuada de hacerlo suele ser tener una máquina de desarrollo (puede ser una máquina virtual) y un repositorio al que se envía el código. Este escenario no requiere ningún acceso a su entorno. Un servidor web de desarrollo puede ejecutarse con un gig de RAM y un núcleo virtual. Así que no hay costo en absoluto.

Si eso no es posible por una razón, hay algunas opciones por ahí. Puede configurar una nueva vm y colocarla en una vlan separada. O puede dejarlo en esa vlan y usar vlans privados para evitar que el host se comunique con otras máquinas en la LAN aparte de la puerta de enlace. También puedes usar contenedores para separar la aplicación.

    
respondido por el davidb 10.01.2018 - 18:24
fuente
2

Si simplemente deseaba poder ver lo que hizo el usuario durante sus sesiones, podría usar un proyecto de código abierto llamado Teleport (consulte gravitacional / teleport en github ) para darles acceso SSH que se registra. Registra los eventos de auditoría y todo lo que se realiza durante las sesiones de shell.

La última versión de Teleport tiene un modo de "proxy de grabación" en el que, incluso si proporcionó la raíz en el nodo de punto final, todo lo que sucede durante la sesión será registrado por el proxy.

    
respondido por el Abraham Ingersoll 12.01.2018 - 19:21
fuente

Lea otras preguntas en las etiquetas