Como posso abrir a porta 80 para que um processo não raiz possa vincular-se a ela?

46

Quero executar um servidor Web no meu Mac como um processo não raiz. Normalmente, apenas processos raiz podem se ligar à porta 80 (ou a qualquer porta abaixo de 1024).

Posso abrir a porta 80 especificamente para que processos não raiz possam ouvi-la?

Avner
fonte
Veja também: Link1 , Link2
Nathan Farrington
mais como a pergunta unix.stackexchange.com , não é?
Filip Bartuzi
1
por que unix se estiver em um sistema macos?
nhed

Respostas:

28

Isso é difícil de fazer por design e, a menos que você tenha acesso root à sua máquina, nenhuma das opções a seguir funcionará, pois elas exigem root para configurar as alterações. Uma vez alterados, porém, os programas do espaço do usuário terão acesso sem ter raiz.

Há duas maneiras comuns de fazer isso, e a escolha depende do motivo pelo qual você está tentando contornar a restrição:

Aponte a porta 80 para outra porta, como 8080

Ao reconfigurar sua máquina para passar todo o tráfego da porta 80 para a porta 8080 ou qualquer porta de sua escolha, você pode permitir que os servidores de espaço do usuário recebam portas de privilégios de root na área à qual têm acesso.

O processo é direto:

Etapa 1: veja as regras atuais do firewall.

sudo ipfw show

Etapa 2: adicionar regra de encaminhamento de porta (80 a 8080)

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

Se você deseja remover suas regras de firewall, execute:

sudo ipfw flush

( fonte )

Essa é uma alteração temporária e será revertida quando você reiniciar ou liberar conforme indicado na última linha.

Você pode tornar a alteração permanente ou adicionar o comando como uma linha de inicialização antes de iniciar o servidor, o que provavelmente é mais seguro do ponto de vista de segurança.

Use Authbind

O Authbind foi projetado especificamente para permitir que um programa acesse portas de nível inferior sem fornecer acesso root completo.

Há uma porta MacOSX:

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

No entanto, ele ainda pode estar limitado ao tráfego IPv4; portanto, talvez seja necessário fazer uma investigação adicional para descobrir se ele atende às suas necessidades.

Adam Davis
fonte
LOVE MacOSX-authbind ... Permite executar, por exemplo, um servidor web na porta 80 - como um "administrador regular". ou seja, no seu 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!
alex grey
13
O OS X Yosemite é removido ipfw. Esta essência descreve uma solução alternativa usando pf.
Lyschoening 17/10/2014
Observe que o redirecionamento de tráfego para uma porta não privilegiada pode ser inseguro se você estiver em um ambiente compartilhado; outro processo pode ser vinculado a essa porta antes do programa ou se o programa for desvinculado da porta mesmo que momentaneamente para uma reinicialização rápida.
Lie Ryan
authbind não é realmente uma ótima solução, obrigado!
favo
7

Você pode usar ncatpara encaminhar o tráfego de um servidor da web em execução em outra porta:

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

Isso encaminhará o tráfego na porta 80 para o host local: 1234. No entanto, isso é um pouco complicado, eu não o usaria além de testes rápidos e definitivamente não estava em produção.

Observe que isso não permitirá que um processo não raiz se vincule a ele, mas escolhendo uma porta à qual o processo possa se vincular, 1234 neste exemplo, parecerá que ele está vinculado à porta 80. Isso está fazendo o equivalente a encaminhando a porta 80 para a porta 1234 com um firewall, mas em uma base muito mais temporária.

Mathew Hall
fonte
2
Esta é uma boa solução alternativa. NB ncatvem com o nmapqual pode ser instalado via portas Mac com sudo port install nmap. O próprio MacPorts pode ser instalado em macports.org/install.php .
William Denniss
Isso só me dá o endereço bind: já com erros de uso.
Matt Joiner
O mesmo aqui - não funcionou. Isso fez o truque: unix.stackexchange.com/a/187038
Sebastian J.
2

Você também pode usar o ssh para encaminhar portas. Portanto, se você possui um servidor em execução no 8080, pode encaminhar o tráfego da porta 80. Aqui está um script que eu uso, que interrompe o apache nativo se estiver em execução e encaminha o tráfego:

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
bdombro
fonte
O encaminhamento de porta ssh pode ter um desempenho bastante baixo e os recursos de segurança não fazem muito sentido em um ambiente local-> local. Melhor usar o encaminhamento de porta embutido no OSX, ou algo como o ncat.
Shayne
-3

O que você deve poder fazer é abrir a porta 80 no seu roteador e apontá-la para o endereço IP local do seu servidor web. Em seguida, no seu Mac, ative o Compartilhamento da Web no painel Preferências do sistema> Compartilhamento e aponte-o para o diretório de sua escolha. Isso funcionou para mim no passado até passar para o 10.6 Server.

Matt Love
fonte
1
Estou procurando isso como uma solução para minha própria máquina de desenvolvimento. Como tenho que trabalhar em locais onde não tenho controle sobre o roteador, esta solução não funcionou para mim. Eu suspeito que funcione se você estiver configurando um servidor e, por algum motivo, não tiver acesso root.
Avner
Então, só para esclarecer, você está tentando configurar um servidor Web em diferentes sites clientes, mas não tem acesso à porta 80 aberta? Como você abrirá a porta no roteador se não tiver acesso? Estou entendendo corretamente ou estou longe da base?
Matt Love
Estou apenas tentando usar a porta 80 em minha própria máquina de desenvolvimento, não em um servidor de produção. Eu implanto no heroku de qualquer maneira.
Avner