Esto es básicamente una adición a la respuesta de maerics, pero como quiero agregar un ejemplo de código escribo otra respuesta con información adicional sobre cómo prevenir problemas de seguridad.
Por lo general, los servidores web se inician como raíz, porque esto es necesario para enlazar puertos por debajo de 1024, pero luego cambian el usuario bajo el que se ejecutan a un usuario no privilegiado.
Puede hacer esto con node.js usando process.setuid("username")
.
El ejemplo siguiente inicia el servidor y luego dejar caer los permisos de root para el usuario "www-data" después de que se ató al puerto 80 cuando se inicia como root:
function StartServer() {
console.log("Starting server...");
// Initalizations such as reading the config file, etc.
server = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
try {
server.listen(80, "0.0.0.0", function(){
process.setuid("www-data");
});
}
catch(err) {
console.error("Error: [%s] Call: [%s]", err.message, err.syscall);
process.exit(1);
}
}
¿Cuál es el número de puerto para el que trabajó el servidor? Tal vez no tienes permiso para enlazar al puerto 80. – Finslicer
He intentado 8080 y funciona como un encanto. – limlim
Si está utilizando Ubuntu por ejemplo (u otro sistema Unix) puede probar 'sudo node sample.js'. Eso hace el truco normalmente. – alessioalex