Solución 1:
para evitar este error, puede resolver el ejecutable sin enlace simbólico con which node
, como ejemplo completo:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
el comando "cuál" muestra la ruta completa de los comandos de shell.
Solución 2:
Lo averigué. Resulta que instalé node, creé un enlace simbólico en /usr/bin/node que apuntaba a otro enlace simbólico en /etc/alternatives/node que apuntaba a otro enlace simbólico en /usr/bin/nodejs.
Ejecutar el comando contra /usr/bin/nodejs funcionó.
Solución 3:
FWIW, otra opción es usar authbind. Authbind usa un mecanismo ligeramente diferente para lograr fines similares a CAP_NET_BIND_SERVICE. Es decir. permite que las aplicaciones sin privilegios usen puertos privilegiados.
Instalar desde apt:
sudo apt-get update && sudo apt-get install authbind
Suponiendo que el app.js deseado se está ejecutando bajo un usuario "usuario" sin privilegios y desea enlazar al puerto 80:
sudo touch /etc/authbind/byport/80
sudo chown user:user /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
Luego ejecute su aplicación de esta manera:
authbind node app.js
Si, en cambio, desea usar algo como "para siempre" (esencialmente demoniza las aplicaciones de nodo), entonces este es el camino:
authbind --deep forever app.js