57 votos

¿Cómo puedo abrir el puerto 80 para que un proceso no-Root pueda unirse a él?

Quiero ejecutar un servidor web en mi Mac como un proceso no-Root. Normalmente sólo los procesos Root pueden enlazar con el puerto 80 (o con cualquier puerto por debajo de 1024).

¿Puedo abrir el puerto 80 específicamente para que los procesos no-Root puedan escuchar en él?

0 votos

Relacionado: enlace1 , enlace2

0 votos

Más como unix.stackexchange.com pregunta, ¿no es así?

2 votos

¿por qué unix si está en un sistema MacOS?

29voto

Rudd Zwolinski Puntos 6852

Esto es difícil de hacer por diseño, y a menos que tenga acceso a Root a su máquina, ninguno de los siguientes funcionará ya que requieren a Root para configurar los cambios. Una vez cambiados, sin embargo, los programas de espacio de usuario tendrán acceso sin tener Root.

Hay dos formas comunes de lograrlo, y la que elijas dependerá de por qué estás tratando de trabajar alrededor de la restricción:

Apunte el puerto 80 a otro puerto, como el 8080

Al reconfigurar su máquina para pasar todo el tráfico del puerto 80 al puerto 8080, o a cualquier puerto de su elección, puede permitir que los servidores espaciales de los usuarios reciban puertos con privilegios de root en el área a la que tienen acceso.

El proceso es sencillo:

Paso 1: Ver las reglas actuales del cortafuegos.

sudo ipfw show

Paso 2: Añadir la regla de reenvío de puerto (80 a 8080)

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in

Si quieres eliminar las reglas del cortafuegos, ejecuta:

sudo ipfw flush

( fuente )

Este es un cambio temporal, y se revertirá una vez que reinicie, o se descargue como se indica en la última línea.

Puedes hacer que el cambio sea permanente o podrías añadir el comando como una línea de inicio antes de iniciar tu servidor, lo cual es probablemente más seguro desde el punto de vista de la seguridad.

Usar Authbind

Authbind fue diseñado específicamente para permitir a un programa el acceso a los puertos de nivel inferior sin darle acceso completo a Root.

Hay un puerto OS X:

https://github.com/Castaglia/MacOSX-authbind

Puede que todavía se limite al tráfico IPv4, aunque es posible que tenga que hacer alguna investigación adicional para saber si satisface sus necesidades.

0 votos

AMO MacOSX-authbind... Le permite ejecutar, por ejemplo, un servidor web en el puerto 80 - como un "administrador regular". es decir, en su launchd .plist ... ` "ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"] ¡Woohoo!

15 votos

OS X Yosemite elimina ipfw . Esta esencia describe una solución alternativa utilizando pf .

0 votos

Tenga en cuenta que redirigir el tráfico a un puerto sin privilegios puede ser inseguro si se encuentra en un entorno compartido; otro proceso puede unirse a ese puerto antes de que lo haga su programa o si su programa desvincula el puerto incluso momentáneamente para un reinicio rápido.

10voto

Raim Puntos 306

Puedes usar ncat para reenviar el tráfico de un servidor web que se ejecuta en algún otro puerto:

sudo ncat -l -p 80 -c ' ncat -l -p 1234'

Esto reenviará el tráfico del puerto 80 al localhost:1234. Sin embargo, no lo usaría en ningún otro lugar más allá de las pruebas rápidas y definitivamente no en producción.

Obsérvese que esto no permitirá que un proceso no-Root se vincule a él, pero al elegir un puerto al que el proceso pueda unirse, 1234 en este ejemplo, parecerá que está unido al puerto 80. Esto es hacer el equivalente de reenviar el puerto 80 al puerto 1234 con un cortafuegos, pero de forma mucho más temporal.

3 votos

Esta es una buena solución. NB. ncat viene con nmap que se puede instalar a través de Mac Ports con sudo port install nmap . El propio MacPorts se puede instalar desde macports.org/install.php .

0 votos

Esto sólo me da errores de bind: address already in use.

1 votos

Lo mismo digo, no funcionó. Esto ha funcionado: unix.stackexchange.com/a/187038

2voto

bdombro Puntos 121

También puedes usar ssh para hacer el reenvío de puertos. Así que si usted tiene un servidor que se ejecuta en 8080, puede reenviar el tráfico del puerto 80. Aquí hay un script que utilizo, que detiene el apache nativo si se está ejecutando y reenvía el tráfico:

forward8080to80.command:

echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080

0 votos

El reenvío de puertos Ssh puede tener un rendimiento bastante bajo, y las características de seguridad no tienen mucho sentido en un entorno local->local. Es mejor usar la redirección de puertos integrada en osx, o algo como ncat.

0voto

Esa Paulasto Puntos 241

El método setuid es lo único que he encontrado que funciona en OS X Catalina (10.15). Por ejemplo, para ejecutar npm run serve --port 80 efectivamente, se ejecutaría sudo chmod u+s $(which npm) .

-3voto

Matt Love Puntos 5380

Lo que deberías poder hacer es abrir el puerto 80 de tu router y apuntarlo a la dirección IP local de tu servidor web. Luego, en tu Mac, habilita Compartir en la Web desde el panel de preferencias de Preferencias del Sistema>Compartir y apunta al directorio que elijas. Esto me ha funcionado en el pasado hasta que cambié al servidor 10.6.

1 votos

Estoy buscando esto como una solución para mi propia máquina dev. Como tengo que trabajar en lugares donde no tengo control sobre el router, esta solución no podría funcionar para mí. Sospecho que debería funcionar si estás configurando un servidor y por alguna razón no tienes acceso Root.

0 votos

Así que, para que quede claro, ¿estás tratando de configurar un servidor web en diferentes sitios de clientes, pero no tienes el acceso para abrir el puerto 80? ¿Cómo vas a conseguir abrir el puerto en el router si no tienes acceso? ¿Estoy entendiendo bien o estoy muy equivocado?

0 votos

Sólo estoy tratando de usar el puerto 80 en mi propia máquina de desarrollo no en un servidor de producción. Yo despliego en heroku de todos modos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X