[英]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的可访问性。
您不需要第三方模块即可执行此操作。 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.