繁体   English   中英

Node.js:使用setuid / setgid后侦听端口80

[英]Nodejs: Listen on port 80 after using setuid/setgid

我只是被一些互联网文章深信,使用setuid / setgid切换到特权较低的用户可能很重要。 由于我正在开发Web应用程序,因此决定选择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的可访问性。

有没有一种方法可以实现安全性,但不使用此类端口就继续使用端口80

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

还要确保在侦听端口80 之后放弃特权,并在process.setgid() 之前调用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');

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM