Nodejs:使用setuid / setgid后侦听端口80

时间:2014-09-04 23:12:08

标签: node.js security http

我对一些互联网文章深信不疑,使用setuid / setgid切换到较低特权用户可能很重要。由于我正在开发一个网络应用程序,我决定去www-data

所以我使用userid NPM模块来确定www-data的用户和组ID,然后更改为它。但是,当我这样做 - 并且完全无关紧要时 - 我得到以下内容(在此示例中,安全处理程序在代码的最底部执行):

2014-09-04T23:07:05.812Z - info: BIRD3 Security -> Changed to www-data:www-data (33:33)

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EACCES
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1023:19)
    at listen (net.js:1064:10)
    at net.js:1146:9
    at dns.js:72:18
    at process._tickCallback (node.js:419:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:906:3

正如您所看到的,只要我更改了我的权限级别,它就会降低端口80的可访问性。

我是否有办法实现安全性,但在不使用something like this?

的情况下继续使用端口80

2 个答案:

答案 0 :(得分:1)

您不需要第三方模块来执行此操作。 process.setgid()process.setuid()都接受ID或组名/用户名。

另外,请确保在 process.setgid()之前删除 AFTER 在端口80上聆听的权限,并确认之前致电process.setuid()

示例:

var net = require('net');

var srv = net.createServer(function(s) {
});

srv.listen(24, function() {
  console.log('listening');
});

process.setgid('www-data');
process.setuid('www-data');

答案 1 :(得分:0)

在回调响应中连接后,setgid()和setuid()是否应该运行?

    srv.listen(24, function() {
console.log('listening');

process.setgid('www-data');
process.setuid('www-data');
    });