2011-11-29 14 views
10

Me gustaría ejecutar un nodo con un usuario con privilegios bajos, ¿es posible? Necesito usar el marco Express.js¿Puedo ejecutar Node.JS con privilegios bajos?

+2

Define "usuarios de privilegios bajos". –

+0

No quiero tun node.js con privilegios ROOT. – Dail

+0

¿Qué te hace pensar que tienes que hacerlo? Nunca lo he necesitado. –

Respuesta

17

Sí. Hay muchas soluciones disponibles para hacer esto, dependiendo de sus necesidades exactas.

Si desea ejecutar el nodo en el puerto 80, puede usar nginx (no funciona aún con WebSockets) o haproxy. Pero tal vez el más rápido y más sucio es el uso de iptables para redirigir el puerto 80 al puerto de su elección:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8003 
sudo iptables -t nat -L 

Cuando estés satisfecho, a continuación, guardar la configuración y asegúrese de que iptables se enciende en el arranque

sudo service iptables save 
sudo chkconfig iptables on 

Para iniciar automáticamente el servicio nodejs como no root, y reiniciarlo si falla, se puede utilizar upstart con un guión como este:

#!upstart 
description "nodeapp" 
author  "you" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

script 
    export HOME="/home/user/" 
    exec sudo -u user /usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log 
end script 

Si estás en una instalación de Amazon EC2, o se produce un error que dice sudo: sorry, you must have a tty to run sudo, a continuación, puede reemplazar su comando exec con esto:

#!upstart 
description "nodeapp" 
author  "you" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

script 
    export HOME="/home/user/" 
    #amazon EC2 doesn’t allow sudo from script! so use su --session-command 
    exec su --session-command="/usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log" user & 
end script 

Y, que no hace esta pregunta, pero para que siga funcionando siempre, echa un vistazo monit! Aquí está a useful guide to setting up node.js with upstart and monit.

+0

¿Qué significa en realidad el ajuste HOME aquí? – blu

+1

Dependiendo de la versión específica del nodo que esté utilizando, cómo se ve la estructura de su directorio y si el nodo fue instalado por el usuario raíz o la raíz, la respuesta varía entre todo y nada :) Puede decirle al nodo dónde se ejecutará de, puede ser completamente ignorado (tenga en cuenta que coloqué '/ home/user/nodeapp' incorrectamente en mi ejemplo, cuando debería coincidir con la ubicación de app.js de'/home/user/', es decir, donde require() va para buscar módulos) – Kato

+0

Impresionante, gracias por la información – blu

Cuestiones relacionadas