Soluzione 1:
per evitare questo errore, puoi risolvere l'eseguibile senza collegamento simbolico con which node
, come esempio completo:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
il comando "which" mostra il percorso completo dei comandi della shell.
Soluzione 2:
Capito. Risulta tuttavia che ho installato node, creato un collegamento simbolico in /usr/bin/node che puntava a un altro collegamento simbolico in /etc/alternatives/node che puntava a un altro collegamento simbolico in /usr/bin/nodejs.
L'esecuzione del comando su /usr/bin/nodejs ha funzionato.
Soluzione 3:
FWIW, un'altra opzione è usare authbind. Authbind utilizza un meccanismo leggermente diverso per raggiungere fini simili a CAP_NET_BIND_SERVICE. Cioè. consente alle app non privilegiate di utilizzare porte privilegiate.
Installa da apt:
sudo apt-get update && sudo apt-get install authbind
Supponendo che app.js desiderato sia in esecuzione con l'utente "utente" non privilegiato e desideri collegarti alla porta 80:
sudo touch /etc/authbind/byport/80
sudo chown user:user /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
Quindi esegui la tua app in questo modo:
authbind node app.js
Se invece desideri utilizzare qualcosa come "per sempre" (essenzialmente demonizza le app dei nodi), allora è così:
authbind --deep forever app.js