我正在设置我的第一个Node.js服务器上的cloud Linux node我对Linux admin..(顺便说一下,我不想同时使用Apache。)所有的安装都是正确的,但是我发现除非我使用root login,我听不进去port 80用节点。但是,出于安全原因,我不愿将其作为根运行。最佳做法是:为节点设置良好的权限/用户,使其安全/沙箱化?允许在这些约束范围内使用端口80。启动节点并自动运行它。处理发送到控制台的日志信息。任何其他一般的维护和安全问题。我应该将端口80的流量转发到不同的侦听端口吗?
3 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
授予安全用户使用端口80的权限
请记住,我们不希望以根用户的身份运行您的应用程序,但是有一个问题:您的安全用户没有使用默认HTTP端口(80)的权限。您的目标是能够发布一个网站,访问者可以使用导航到一个易于使用的URL,如http://ip:port/
不幸的是,除非您以root用户身份登录,否则通常必须使用如下所示的URLhttp://ip:port
-港口号>1024。
很多人被困在这里,但解决办法很简单。有几个选择,但这是我喜欢的。键入以下命令:
sudo apt-get install libcap2-bin sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
现在,当您告诉Node应用程序希望它在端口80上运行时,它不会抱怨。
森栏
TA贡献1810条经验 获得超5个赞
在绑定到端口80(或443)后删除根权限。
这允许端口80/443保持保护,同时仍然阻止您以root用户身份服务请求:
function drop_root() { process.setgid('nobody'); process.setuid('nobody');}
使用上述功能的完整示例:
var process = require('process');var http = require('http');var server = http.createServer(function(req, res) { res.write("Success!"); res.end();});server.listen(80, null, null, function() { console.log('User ID:',process.getuid()+', Group ID:',process.getgid()); drop_root(); console.log('User ID:',process.getuid()+', Group ID:',process.getgid());});
- 3 回答
- 0 关注
- 853 浏览
添加回答
举报
0/150
提交
取消