Rob*_*ugs 250 linux security configuration web-applications node.js
我正在设置我的第一台Node.js服务器cloud Linux node,我对细节很新Linux admin.(顺便说一句,我不是在尝试同时使用Apache.)
一切都安装正确,但我发现,除非我使用root login,我无法听port 80节点.但是出于安全原因,我宁愿不以root身份运行它.
什么是最佳做法:
我应该将端口80流量转发到不同的侦听端口吗?
谢谢
Dan*_*iel 516
我在我的云实例上做的是使用以下命令将端口80重定向到端口3000:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Run Code Online (Sandbox Code Playgroud)
然后我在端口3000上启动我的Node.js.端口80的请求将被映射到端口3000.
您还应该编辑您的/etc/rc.local文件并添加该行减去sudo.这将在机器启动时添加重定向.您不需要sudoin,/etc/rc.local因为那些命令root在系统引导时运行.
使用forever模块启动Node.js.它将确保它在崩溃时重新启动,并将控制台日志重定向到文件.
将Node.js启动脚本添加到您为端口重定向编辑的文件中/etc/rc.local.这将在系统启动时运行Node.js启动脚本.
这不仅适用于Linode,还适用于Digital Ocean,AWS EC2和其他VPS提供商.但是,基于RedHat的系统/etc/rc.local是/ect/rc.d/local.
Mee*_*hta 108
授予安全用户权限以使用端口80
请记住,我们不希望以root用户身份运行您的应用程序,但有一个障碍:您的安全用户无权使用默认HTTP端口(80).您的目标是能够通过导航到易于使用的URL来发布访问者可以使用的网站http://ip:port/
不幸的是,除非您以root身份登录,否则通常必须使用类似的URL http://ip:port- 其中端口号> 1024.
很多人都被困在这里,但解决方案很简单.有一些选择,但这是我喜欢的.输入以下命令:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
Run Code Online (Sandbox Code Playgroud)
现在,当您告诉Node应用程序您希望它在端口80上运行时,它不会抱怨.
检查此参考链接
slu*_*und 14
绑定到端口80(或443)后删除root权限.
这允许端口80/443保持受保护,同时仍然阻止您以root身份提供请求:
function drop_root() {
process.setgid('nobody');
process.setuid('nobody');
}
Run Code Online (Sandbox Code Playgroud)
使用上述功能的完整工作示例:
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());
});
Run Code Online (Sandbox Code Playgroud)
请参阅此完整参考资料.
对于80号港口(这是原始问题),丹尼尔是完全正确的.我最近搬到了https不得不切换iptables到管理SSL证书的轻型nginx代理.我发现了一个有用的答案与沿要点通过gabrielhpugliese如何处理这个问题.基本上我
openssl genrsa 2048 > private-key.pem
openssl req -new -key private-key.pem -out csr.pem
Run Code Online (Sandbox Code Playgroud)改变了location在/etc/nginx/conf.d/example_ssl.conf以
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
}
Run Code Online (Sandbox Code Playgroud)通过cat将各个证书组合在一起并将其链接到我的nginx example_ssl.conf文件中来格式化nginx的证书(和未注释的东西,在名称中删除'example',...)
ssl_certificate /etc/nginx/ssl/cert_bundle.cert;
ssl_certificate_key /etc/nginx/ssl/private-key.pem;
Run Code Online (Sandbox Code Playgroud)希望这可以为别人带来一些麻烦.我确信有一种纯粹的节点方式可以做到这一点,但是nginx很快就可以了.
| 归档时间: |
|
| 查看次数: |
138166 次 |
| 最近记录: |