¿Cómo puedo abrir el puerto 80 para que un proceso no root se pueda vincular a él?

46

Quiero ejecutar un servidor web en mi Mac como un proceso no root. Normalmente, solo los procesos raíz se pueden enlazar al puerto 80 (o a cualquier puerto por debajo de 1024).

¿Puedo abrir el puerto 80 específicamente para que los procesos no root puedan escucharlo?

    
pregunta Avner 18.01.2012 - 12:10

4 respuestas

27

Esto es difícil de hacer por diseño y, a menos que tenga acceso de root a su máquina, ninguna de las siguientes opciones funcionará, ya que requieren root para configurar los cambios. Sin embargo, una vez modificados, los programas del espacio de usuario tendrán acceso sin tener raíz.

Hay dos formas comunes de lograr esto, y la que elijas dependerá de por qué intentas evitar la restricción:

Apunta el puerto 80 a otro puerto, como 8080

Al reconfigurar su máquina para pasar todo el tráfico del puerto 80 al puerto 8080, o cualquier puerto que elija, entonces puede permitir que los servidores de espacio de usuarios reciban puertos de privilegios de root en el área a la que se les da acceso.

El proceso es sencillo:

  

Paso 1: vea las reglas actuales del firewall.

sudo ipfw show
     

Paso 2: Agregar regla de reenvío de puertos (80 a 8080)

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

Si desea eliminar sus reglas de firewall, ejecute:

     

sudo ipfw flush

( fuente )

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

Puede hacer que el cambio sea permanente , o podría agregar el comando como una línea de inicio antes de iniciar su servidor, lo que probablemente sea más seguro desde el punto de vista de la seguridad.

Usar Authbind

Authbind fue diseñado específicamente para permitir que un programa acceda a puertos de niveles inferiores sin darle acceso total a la raíz.

Hay un puerto OS X:

enlace

Sin embargo, aún puede estar limitado al tráfico IPv4, es posible que deba realizar una investigación adicional para determinar si satisface sus necesidades.

    
respondido por el Adam Davis 30.03.2012 - 17:45
7

Puede usar ncat para reenviar el tráfico de un servidor web que se ejecuta en otro puerto:

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

Esto reenviará el tráfico en el puerto 80 a localhost: 1234. Esto es un poco de un kludge sin embargo, no lo usaría en ningún lugar más allá de las pruebas rápidas y definitivamente no está en producción.

Tenga en cuenta que esto no permitirá que un proceso no root se vincule a él, pero al elegir un puerto al que se puede enlazar el proceso, 1234 en este ejemplo, parecerá que está vinculado al puerto 80. Esto está haciendo el equivalente de reenviar el puerto 80 al puerto 1234 con un firewall, pero de manera mucho más temporal.

    
respondido por el Mathew Hall 30.03.2012 - 17:53
2

También puede usar ssh para hacer el reenvío de puertos. Entonces, si tiene un servidor que se ejecuta en 8080, puede reenviar el tráfico desde el puerto 80. Este es un script que uso, 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 [email protected] -L 80:127.0.0.1:8080
    
respondido por el bdombro 19.09.2016 - 01:00
-3

Lo que debería poder hacer es abrir el puerto 80 en su enrutador y apuntarlo a la dirección IP local de su servidor web. Luego, en su Mac, habilite Compartir en la Web desde el panel Preferencias de Sistema > Compartir y diríjalo al directorio de su elección. Esto me ha funcionado en el pasado hasta que se cambió al servidor 10.6.

    
respondido por el Matt Love 18.01.2012 - 23:03

Lea otras preguntas en las etiquetas