¿Cuáles son las implicaciones de seguridad de INICIAR un servidor de origen con proxy inverso como usuario sin privilegios?

2

Una recomendación común como parte de la seguridad del servidor web es ejecutar el demonio del servidor como un usuario sin privilegios (por ejemplo, nadie) para que los exploits que ejecutan el código arbitrario puedan tener menos efectos no deseados. Sin embargo, dado que el puerto 80 es un "puerto privilegiado", el servidor debe iniciarse como administrador (por ejemplo, raíz) y soltar los privilegios en la solicitud a los hijos.

Sin embargo, no he encontrado ninguna fuente que discuta las implicaciones de seguridad de tener un root involucrado cuando se ejecuta un servidor de origen en un puerto sin privilegios que está detrás de un proxy inverso.

Como el puerto no tiene privilegios, el servidor de origen no necesita ser root para vincularse. ¿Hay razones de seguridad para iniciar el servidor de origen como root? ¿Por qué no iniciar el servidor como el usuario sin privilegios para empezar?

Suponga configuraciones casi idénticas, donde la única diferencia es que, en la instancia A, el servidor de origen se inicia como root y luego elimina los privilegios, mientras que la instancia B se inicia como un usuario sin privilegios.

    
pregunta benrifkah 18.05.2013 - 00:12
fuente

2 respuestas

1

La razón principal para iniciar un servicio como raíz (que luego se reduce a un usuario sin privilegios) es aumentar la separación entre el servicio en sí y lo que hace el servicio.

El ejemplo clásico es abrir un puerto privilegiado, pero también hay otras operaciones similares. Por ejemplo, es posible que desee que el servicio cargue archivos de configuración a los que el servicio "secundario" no puede acceder una vez que el servicio está en funcionamiento.

Además, solo la raíz puede chroot() a un directorio enjaulado o setuid() a otro usuario.

    
respondido por el tylerl 19.07.2013 - 01:39
fuente
0

Instancia B: el niño puede matar al padre

Suponga que ambas instancias tienen una vulnerabilidad por la cual un atacante remoto puede crear una solicitud que haga que se ejecute un código arbitrario en un proceso secundario. Además, suponga que la instancia A, que comienza como raíz, elimina los privilegios dentro del hijo antes de que atienda las solicitudes. Esto deja el proceso padre ejecutándose como root.

Con la instancia B, un atacante podría causar que el proceso secundario mate al padre y reemplace todo el demonio del servidor de origen con su propio demonio.

Sin embargo, con la instancia A, el padre no escuchará las señales del niño, por lo que un atacante no podrá matar al padre de esta manera .

Instancia A: el padre puede romper el sistema

Ahora asuma una vulnerabilidad por la cual un atacante remoto puede crear una solicitud que haga que se ejecute un código arbitrario en el proceso principal .

Con la instancia A, un atacante obtiene las claves de la ciudad porque el padre se ejecuta como root y puede ejecutar código arbitrario.

Sin embargo, con la instancia B, el atacante obtiene acceso limitado a lo que pueda hacer el usuario sin privilegios.

    
respondido por el benrifkah 18.05.2013 - 00:12
fuente

Lea otras preguntas en las etiquetas