解決策 1:
このエラーを回避するには、非シンボリック リンクの実行可能ファイルを which node
で解決します。 、完全な例として:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
"which" コマンドは、シェル コマンドのフル パスを示します。
解決策 2:
理解した。しかし、ノードをインストールし、/usr/bin/node にシンボリック リンクを作成し、/usr/bin/nodejs 内の別のシンボリック リンクを指す /etc/alternatives/node 内の別のシンボリック リンクを指していることが判明しました。
/usr/bin/nodejs に対してコマンドを実行するとうまくいきました。
解決策 3:
FWIW、別のオプションはauthbindを使用することです。 Authbind は、CAP_NET_BIND_SERVICE と同様の目的を達成するために、わずかに異なるメカニズムを使用します。つまり非特権アプリが特権ポートを使用できるようにします。
apt からインストール:
sudo apt-get update && sudo apt-get install authbind
目的の app.js が非特権ユーザー「user」の下で実行されており、ポート 80 にバインドしたいとします。
sudo touch /etc/authbind/byport/80
sudo chown user:user /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
次に、次のようにアプリを実行します:
authbind node app.js
代わりに「forever」(基本的にノード アプリをデーモン化する) のようなものを使用したい場合は、次のようにします:
authbind --deep forever app.js