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

问题描述 投票:2回答:2

我可以在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以来事情发生了变化。

node.js server port listen
2个回答
2
投票

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

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

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

他们应该看起来像

CapPrm: 0000000000000400
CapEff: 0000000000000400
CapBnd: 0000003fffffffff

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

CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff

希望能帮助到你。在与朋友协商后,我才能找到这个:)


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
© www.soinside.com 2019 - 2024. All rights reserved.