如何在Ubuntu 18.04上允许节点侦听1024以下的端口?

时间:2018-11-23 10:30:29

标签: node.js server port listen

我可以在安装了nvm的节点中将1023以上的PORTserver.listen(PORT)一起使用。如何为非特权用户使用系统端口(例如1024以下)?

在我们的Ubuntu 16.04服务器上,我曾经这样做:

sudo setcap CAP_NET_BIND_SERVICE=+eip `readlink -f \`which node\``

但是,我们已经升级到Ubuntu 18.04,它似乎不再起作用。我看到以下错误:

Error listen EACCES 0.0.0.0:925

所有低于1024的端口都会发生这种情况,所以这不仅仅是端口已被使用的一次性情况。

为什么这个不行了?自从Ubuntu 18.04以来,我一定会丢失一些东西,否则事情已经发生了变化。

2 个答案:

答案 0 :(得分:2)

检查启动了可执行文件的分区是否未安装nosuid

getcap不能帮助进行故障排除,因为它将显示在文件系统上设置的属性,而不是运行时可用的实际功能。

您可以在/proc/PID/status中查看运行时功能。

它们应该看起来像

CapPrm: 0000000000000400
CapEff: 0000000000000400
CapBnd: 0000003fffffffff

在我的nosuid分区上,他们就像这样。

CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff

希望有帮助。 与朋友咨询后,我才能够找到答案:)

答案 1 :(得分:0)

@AdiRoiban关于setcap为什么不起作用的答案可能是正确的。检查安装了node的文件系统。对于nvmnode可能会安装在您的主目录中。您的主目录可能已加密。并且您的加密主目录可能安装为nosuid

这是我最终使用的解决方法。


首先,安装authbind。然后在/etc/authbind/byport/中创建您希望能够作为空文件访问的端口。向他们授予您的用户或组的读取权限。出于测试目的,您可以将用户root:root和权限777一起使用。

接下来,像这样启动您的节点应用程序:

authbind node index.js

如果应用程序产生一个需要访问的node进程(例如nodemon),则需要使用--deep命令行开关授予该进程许可权以授予子进程许可权。

例如:

authbind --deep nodemon --inspect index.js