update tutorial node mac instalar ejemplos node.js root iptables

node.js - mac - node js tutorial



¿Cómo ejecutar node.js como usuario no root? (3)

Estoy ejecutando un servidor node.js, que atenderá las solicitudes en el puerto 80 entre otros. Claramente, esto requiere que la aplicación se ejecute como root (en Linux).

Mirando esta publicación ( http://syskall.com/dont-run-node-dot-js-as-root ) como ejemplo, está claro que hay formas simples de permitir que el nodo se ejecute como un usuario no root, pero me pregunto si alguien tiene opiniones sobre las ventajas / desventajas de los diferentes métodos sugeridos:

  1. código: use setuid () para desplegar desde la raíz a un usuario sin privilegios después de establecer la escucha en el puerto 80.

  2. usar un servidor proxy de algún tipo para redirigir las solicitudes a un puerto> 1024 (y por lo tanto no es necesario que el nodo se ejecute como root)

  3. usando tablas de IP para reenviar a otro puerto (el nodo ídem no se ejecutaría como root)

Gracias


(No tengo suficiente reputación para agregar un comentario al de Matt Browne, así que escribo esto como una respuesta. Siéntase libre de editar).

Existe un método más simple para cargar reglas de iptables automáticamente después de un reinicio que el descrito en el enlace de Matt Browne: se puede instalar iptables-persistent desde los repositorios usando apt-get:

apt-get install iptables-persistent

Las reglas aún deben guardarse manualmente de esta manera:

IPv4:

iptables-save > /etc/iptables/rules.v4

IPv6:

iptables-save > /etc/iptables/rules.v6

(Fuente: http://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern (alemán))


La opción 1 requiere que inicie el servidor de nodo como root. No es ideal.

La opción 2 agrega sobrecarga a cada solicitud manejada y agrega otro punto de falla a su pila.

La opción 3 es el método más simple y eficiente.

Para implementar la Opción 3, agregue lo siguiente a sus scripts de inicio del sistema. ( /etc/rc.d/rc.local en sistemas basados ​​en RedHat como AWS).

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

Eso redireccionará las solicitudes del puerto 80 al puerto 3000.


Me encanta la simplicidad de esta solución:

sudo setcap ''cap_net_bind_service=+ep'' `which node`

También funciona para otros programas que no sean nodejs por cierto.

Básicamente, como segundo parámetro, escribe la ruta al ejecutable del programa (como /usr/bin/nodejs en Ubuntu), en el caso anterior, which node debería proporcionarlo dinámicamente, haciendo que esto funcione independientemente de la distribución de Linux.

Sin embargo, tenga en cuenta que cuando actualice nodejs o el ejecutable se sobrescriba por alguna otra razón, tendrá que ejecutar ese mismo comando nuevamente.

Fuentes: