在 Linux 中使用 80 端口(Ubuntu)运行 Node.js 的最佳实践
linuxoperating systemopen source更新于 2026/1/11 23:52:17
我们知道,大多数情况下,我们希望 Node 应用程序监听 80 端口。虽然这是一种广泛使用的技术,而且很多时候我们只需要在项目配置中简单地将端口设置为 80 即可。真正的问题在于,如今许多操作系统(例如 OS X、BSD)都需要 root 权限才能实现这一点。
一种解决方法是确保以超级用户身份启动应用程序。
命令
sudo node server.js
虽然这实际上可能在很大程度上解决问题,但这种方法也存在漏洞。此步骤涉及许多潜在风险。一个简单的情况是,如果有人控制了我们的应用程序,然后开始对其进行恶意操作。
这就是为什么通常不建议在整个会话期间以 root 身份运行应用程序的原因。
另一种更好的方法是将当前正在运行我们进程的用户帐户转移到安全性较低的用户帐户,例如我们的普通帐户。
为了做到这一点,我们需要在全局进程中添加两个方法来处理从安全用户到安全性较低的用户的进程转移。
这两个全局进程是 −
setgid()
setuid()
我们可以创建一个简单的函数来调用上述两个函数,以确保 80 端口仍然受到保护,同时仍然阻止我们以 root 用户身份处理请求。
考虑下面显示的函数 −
function drop_root_priviliges(){
process.setgid(‘unknown’)
process.setuid(‘unknown’)
}
下面显示了上述函数的完整工作示例。
const process = require('process');
const 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 is:',process.getuid()+', Group ID:',process.getgid());
drop_root_priviliges();
console.log('User ID is:',process.getuid()+', Group ID:',process.getgid());
});
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

