Lösung 1:
Um diesen Fehler zu vermeiden, können Sie die ausführbare Datei ohne Symlink mit which node
auflösen , als vollständiges Beispiel:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
der "what"-Befehl zeigt den vollständigen Pfad der Shell-Befehle.
Lösung 2:
Herausgefunden. Es stellte sich jedoch heraus, dass ich node installiert und einen Sym-Link in /usr/bin/node erstellt habe, der auf einen anderen Sym-Link in /etc/alternatives/node verwies, der auf einen anderen Sym-Link in /usr/bin/nodejs zeigte.
Das Ausführen des Befehls gegen /usr/bin/nodejs hat funktioniert.
Lösung 3:
FWIW, eine andere Option ist die Verwendung von authbind. Authbind verwendet einen etwas anderen Mechanismus, um ähnliche Ziele wie CAP_NET_BIND_SERVICE zu erreichen. Dh ermöglicht nicht privilegierten Apps, privilegierte Ports zu verwenden.
Von apt installieren:
sudo apt-get update && sudo apt-get install authbind
Angenommen, die gewünschte app.js wird unter dem nicht privilegierten Benutzer „user“ ausgeführt und Sie möchten an Port 80 binden:
sudo touch /etc/authbind/byport/80
sudo chown user:user /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
Führen Sie dann Ihre App wie folgt aus:
authbind node app.js
Wenn Sie stattdessen etwas wie „für immer“ verwenden möchten (im Wesentlichen dämonisiert Knoten-Apps), dann ist dies der richtige Weg:
authbind --deep forever app.js