¿Una aplicación iniciada por el usuario root tiene privilegios de root?

1

Estoy iniciando node.js en mi servidor. Tengo que iniciar el servidor HTTP node.js como root, ya que escuchará en el puerto 80. Una vez que inicie el archivo node.js en el puerto 80, si una persona puede ejecutar algún código en mi servidor a través de la aplicación ¿La persona tiene privilegios de root?

Estoy usando xubuntu.

    
pregunta krionz 21.08.2018 - 23:11
fuente

2 respuestas

2

Depende de la implementación real del servidor.

Aunque parece que node.js comenzó como root mantendrá estos privilegios, otros servidores (como Apache o nginx) solo comenzarán como root y luego renunciarán a los privilegios. Un diseño típico, por ejemplo, es tener algún proceso maestro que se enlaza a los sockets con los privilegios necesarios y luego forja a un hijo que renuncia a todos los privilegios de raíz de forma permanente antes de procesar cualquier dato de la red. Esto es posible ya que los sockets de escucha se heredan del proceso principal y los permisos de root solo fueron necesarios para vincular el socket a un puerto privilegiado pero no para aceptar conexiones en el socket establecido.

Por ejemplo, con nginx verá algo como lo siguiente:

$ ps -ax -o user,pid,ppid,cmd | grep nginx
root     14746     1 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 14747 14746 nginx: worker process
www-data 14748 14746 nginx: worker process 

El primer proceso que se muestra es el maestro, ejecutándose como root. Los otros son los trabajadores iniciados por el maestro que se ejecuta como www-data sin privilegios. Solo estos trabajadores no privilegiados procesarán la entrada del usuario y, por lo tanto, en caso de un compromiso debido a alguna entrada inesperada de la red, solo el usuario no privilegiado se verá comprometido primero. Por supuesto, un atacante podría intentar realizar una escalada de privilegios locales utilizando errores adicionales en el host, pero eso es un problema diferente.

    
respondido por el Steffen Ullrich 22.08.2018 - 00:03
fuente
0

Seguro que sí. Es por eso que en producción algunas personas usan NGINX como un proxy para nodos. Luego puede iniciar su nodo en un puerto con un número alto que no requiere privilegios escalados.

Aquí hay un resumen sobre la configuración de NGINX y Node.JS enlace

    
respondido por el Joe M 21.08.2018 - 23:27
fuente

Lea otras preguntas en las etiquetas