为了账号安全,请及时绑定邮箱和手机立即绑定

使用端口80运行Node.js的最佳实践(Ubuntu/Linode)

使用端口80运行Node.js的最佳实践(Ubuntu/Linode)

慕运维8079593 2019-07-13 16:31:42
我正在设置我的第一个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上运行时,它不会抱怨。


查看完整回答
反对 回复 2019-07-13
?
森栏

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());});


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 808 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信