Come posso aprire la porta 80 in modo che un processo non-root possa collegarsi ad esso?

46

Voglio eseguire un server Web sul mio Mac come processo non root. Normalmente solo i processi di root possono eseguire il binding sulla porta 80 (o su qualsiasi porta inferiore a 1024).

Posso aprire la porta 80 in modo specifico in modo che i processi non root possano ascoltarla su di essa?

    
posta Avner 18.01.2012 - 12:10
fonte

4 risposte

27

Questo è difficile da fare in base alla progettazione e, a meno che tu non abbia accesso root alla tua macchina, nessuna delle seguenti cose funzionerà in quanto richiede a root di configurare le modifiche. Una volta cambiati, però, i programmi userspace avranno accesso senza avere root.

Ci sono due modi comuni per farlo, e che sceglierai dipenderà dal motivo per cui stai cercando di aggirare la restrizione:

Porta punto 80 su un'altra porta, ad esempio 8080

Riconfigurando la tua macchina per passare tutto il traffico sulla porta 80 alla porta 8080 o qualsiasi porta di tua scelta, puoi consentire ai server dello spazio utente di ricevere le porte privilegiate di root nell'area a cui hanno accesso.

Il processo è semplice:

Step 1: View current firewall rules.

sudo ipfw show

Step 2: Add port forwarding rule (80 to 8080)

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

If you want to remove your firewall rules run:

sudo ipfw flush

( fonte )

Questa è una modifica temporanea e verrà ripristinata una volta riavviata, oppure verrà ripristinata come indicato nell'ultima riga.

Puoi rendere permanente la modifica , oppure è possibile aggiungere il comando come linea di avvio prima di avviare il server, che è probabilmente più sicuro dal punto di vista della sicurezza.

Utilizza Authbind

Authbind è stato progettato in modo specifico per consentire a un programma di accedere a porte di livello inferiore senza concedere l'accesso root.

C'è una porta OS X:

link

Potrebbe comunque essere limitato al traffico IPv4, tuttavia potrebbe essere necessario effettuare ulteriori accertamenti per trovare se soddisfa le tue esigenze.

    
risposta data 30.03.2012 - 17:45
fonte
7

Puoi utilizzare ncat per inoltrare il traffico da un server web in esecuzione su qualche altra porta:

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

Questo inoltrerà il traffico sulla porta 80 a localhost: 1234. Questo è un po 'un trucco, tuttavia, non lo userei da nessuna parte oltre i test rapidi e sicuramente non in produzione.

Si noti che questo non consentirà a un processo non root di collegarsi ad esso, ma selezionando una porta a cui il processo può legarsi, 1234 in questo esempio, sembrerà legato alla porta 80. Questo sta facendo l'equivalente della porta di inoltro 80 alla porta 1234 con un firewall, ma su una base molto più temporanea.

    
risposta data 30.03.2012 - 17:53
fonte
2

È anche possibile utilizzare ssh per effettuare il port forwarding. Quindi se hai un server in esecuzione su 8080, puoi inoltrare il traffico dalla porta 80. Ecco uno script che uso, che blocca l'apache nativo se è in esecuzione e inoltra il traffico:

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
    
risposta data 19.09.2016 - 01:00
fonte
-3

Quello che dovresti essere in grado di fare è aprire la porta 80 sul router e indirizzarla all'indirizzo IP locale del tuo server web. Quindi sul tuo Mac, abilita Condivisione Web dal pannello delle preferenze di Sistema > Condivisione condivisione e indirizzalo alla directory di tua scelta. Questo ha funzionato per me in passato fino a passare a 10.6 Server.

    
risposta data 18.01.2012 - 23:03
fonte

Leggi altre domande sui tag