tutorial socket example http node.js permission-denied

http - socket - Error de EACCES de Node.js al escuchar en la mayoría de los puertos



socket io tutorial (11)

Corriendo en su estación de trabajo

Como regla general, los procesos que se ejecutan sin privilegios de root no pueden vincularse a puertos por debajo de 1024.

Entonces intente un puerto más alto, o ejecute con privilegios elevados a través de sudo . Puede degradar los privilegios una vez que se haya vinculado al puerto bajo mediante process.setgid y process.setuid .

Corriendo en heroku

Al ejecutar sus aplicaciones en heroku, debe utilizar el puerto como se especifica en la variable de entorno PORT.

Ver http://devcenter.heroku.com/articles/node-js

var server = require(''http'').createServer(); var port = process.env.PORT || 3000; server.listen(port, function() { console.log(''Listening on '' + port); });

Estoy probando una aplicación (espero que se ejecute en heroku, pero también tengo problemas a nivel local). Me está dando un error EACCES cuando ejecuta http.Server.listen (), pero solo ocurre en algunos puertos.

Entonces, localmente estoy corriendo:

joe@joebuntu:~$ node > var h = require(''http'').createServer(); > h.listen(900); Error: EACCES, Permission denied at Server._doListen (net.js:1062:5) at net.js:1033:14 at Object.lookup (dns.js:132:45) at Server.listen (net.js:1027:20) at [object Context]:1:3 at Interface.<anonymous> (repl.js:150:22) at Interface.emit (events.js:42:17) at Interface._onLine (readline.js:132:10) at Interface._line (readline.js:387:8) at Interface._ttyWrite (readline.js:564:14)

No tengo nada funcionando en el puerto 900 (ni en ninguno de los otros 20 puertos que probé), así que esto debería funcionar. La parte rara es que funciona en algunos puertos. Por ejemplo, el puerto 3000 funciona perfectamente.

¿Qué causaría esto?

Actualización 1:

Me di cuenta de que en mi computadora local, el error EACCES está llegando porque tengo que ejecutar el nodo como root para enlazar a esos puertos determinados. No sé por qué sucede esto, pero usar sudo lo corrige. Sin embargo, esto no explica cómo lo arreglaría en Heroku. No hay forma de ejecutarse como root en Heroku, entonces, ¿cómo puedo escuchar en el puerto 80?


¡¡DIOS MIO!! En mi caso, estaba haciendo ....listen(ip, port) lugar de ...listen(port, ip) y eso fue lanzar el mensaje de error: Error: listen EACCES localhost

Estaba usando números de puerto> = 3000 e incluso lo intenté con acceso de administrador. Nada funcionó. Luego, con un cambio más cercano, noté el problema. Se cambió a ...listen(port, ip) y todo comenzó a funcionar bien !!

Solo llamándolo en caso de que sea útil para otra persona ...


Compruebe este enlace de referencia :

Dar permiso de usuario seguro para usar el puerto 80

Recuerde, NO queremos ejecutar sus aplicaciones como usuario root, pero hay un problema: su usuario seguro no tiene permiso para usar el puerto HTTP predeterminado (80). Su objetivo es poder publicar un sitio web que los visitantes puedan usar navegando a una URL fácil de usar como http://ip:port/

Desafortunadamente, a menos que inicie sesión como root, normalmente tendrá que usar una URL como http://ip:port - donde puerto número> 1024.

Mucha gente se queda estancada aquí, pero la solución es fácil. Hay algunas opciones pero esta es la que me gusta. Escriba los siguientes comandos:

sudo apt-get install libcap2-bin sudo setcap cap_net_bind_service=+ep `readlink -f /`which node/``

Ahora, cuando le dice a una aplicación Node que desea que se ejecute en el puerto 80, no se quejará.


El usuario no privilegiado (no root) no puede abrir un socket de escucha en puertos por debajo de 1024.


Obtuve este error en mi mac porque ejecutaba el servidor apache de forma predeterminada utilizando el mismo puerto que el servidor de nodo, que en mi caso era el puerto 80. Todo lo que tenía que hacer es detenerlo con sudo apachectl stop

Espero que esto ayude a alguien.


Otro enfoque es hacer redirección de puertos:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 900 -j REDIRECT --to-port 3000

Y ejecuta tu servidor en el puerto> 1024:

require(''http'').createServer().listen(3000);

ps lo mismo podría hacerse para el puerto https (443) por cierto.


Prueba authbind:

http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html

Después de la instalación, puede agregar un archivo con el nombre del número de puerto que desea usar en la siguiente carpeta: / etc / authbind / byport /

Déle 500 permisos usando chmod y cambie la propiedad al usuario con el que desea ejecutar el programa.

Después de eso, haga "authbind node ..." como ese usuario en su proyecto.


Recuerde que si usa sudo para enlazar con el puerto 80 y está usando las variables env PORT & NODE_ENV, debe reexportar esas vars ya que ahora está en el perfil raíz y no en su perfil de usuario. Entonces, para que esto funcione en mi Mac, hice lo siguiente:

sudo su export NODE_ENV=production export PORT=80 docpad run


Significa que el nodo no puede escuchar en un puerto definido. Cámbielo a algo como 1234 o 2000 o 3000 y reinicie su servidor.


Tengo este error en mi Mac también. Utilizo ''npm run dev'' para ejecutar mi aplicación nodejs en Windows y funciona bien. pero obtuve este error en mi mac. El error dado fue: Error: bind EACCES null: 80 mac.

La solución # 1 es Dar acceso de root y ejecutarlo (que es uno habitual). use ''sudo npm run dev'' y necesito que ingrese la contraseña, eso me funciona. Espero que pueda ayudar!

referencia: error EACCES de Node.js al escuchar en el puerto http 80 (permiso denegado)


esto sucede si el puerto en el que está tratando de alojar localmente es portfowarded