Asegure un servidor en 'localhost' para que solo los usuarios autorizados puedan conectarse

5

Considere una aplicación (como una libreta IPython) que ejecuta un servidor HTTP, y que (¡por diseño!) permite la ejecución de código arbitrario por usuarios autenticados (este es el punto completo de IPython, Jupyter et al , y no es un error).

Claramente, es un desastre para cualquier usuario poder autenticar OTROS que el usuario con el que se ejecuta el servidor.

Esto puede hacerse asegurándose de que solo el usuario autorizado pueda proporcionar las credenciales adecuadas y asegurándose de que estas credenciales solo se proporcionen al servidor apropiado.

Me gustaría manejar esto de una forma totalmente automatizada.

La solución ideal parece ser el servidor TLS y los certificados de cliente. El problema es que esto requiere una configuración manual, incómoda. Quiero que no haya una configuración manual, solo algo que puede ejecutar el propio servidor.

Nota: el servidor se ejecuta como el mismo usuario que el cliente, por lo que tiene acceso de escritura a los directorios que utiliza el navegador del cliente para almacenar la configuración por usuario. No se está ejecutando como un usuario privilegiado, por lo que no puede modificar las reglas del cortafuegos.

Una solución

perfecta sería una forma de imponer un certificado de servidor específico y proporcionar un certificado de cliente específico del servidor, todo controlado (externamente) por el proceso del servidor (que es solo un programa de línea de comandos que ejecuta un servidor HTTPS).

No, el servidor no puede ejecutarse como un usuario sin privilegios. Realmente es un IDE que utiliza el navegador como una GUI. necesita para poder ejecutar código arbitrario con los privilegios del usuario que invoca. De ahí la necesidad de una autenticación absolutamente segura.

Sí, puedo rechazar conexiones que no sean de 127.0.0.1 . Esto no ayuda contra los atacantes locales de otros usuarios en la misma máquina.

¿Es esto posible o necesitaré insertar un navegador? No creo que Chromium Embedded Framework ayudaría, ya que no controla el control de la confianza del certificado TLS.

    
pregunta Demi 20.04.2016 - 04:15
fuente

1 respuesta

2

Suponiendo que puede manipular el código de ambas aplicaciones del servidor, simplemente coloque un valor aleatorio en un archivo que el usuario que ejecuta en el momento del servidor pueda leer, y luego use eso como un token de autenticación (ya sea directamente o como sal para La respuesta a un reto). Por ejemplo, podría establecer una contraseña http al inicio utilizando un script simple y soltar el texto sin formato en un archivo. Pero al igual que el certificado del cliente, el proceso de obtención de datos en el cliente sigue siendo manual.

La forma única de hacer que esto funcione de manera transparente para el usuario sin volver a escribir el cliente sería configurar una aplicación web para que la usen todos los usuarios autorizados que llenaron un token en una cookie en el navegador. escribió un archivo de configuración del servidor que requería que se conectara una cookie específica y que escuchara en un puerto asignado, luego inició el servidor ejecutándose como el usuario identificado , lo que por lo tanto implica volver a autenticarse primero, utilizando el mecanismo de autenticación del sistema operativo. Sin embargo, esto significa otorgar muchos privilegios a la instancia del servidor maestro y la complicación de la autenticación integrada. Pero administrar los puertos y los procesos será una pesadilla.

¿No puedes simplemente darles máquinas virtuales?

    
respondido por el symcbean 10.10.2016 - 00:45
fuente

Lea otras preguntas en las etiquetas