Estou trabalhando em um servidor Linux compartilhado como um usuário normal sem acesso root. Posso iniciar um programa ouvindo em uma porta TCP local e ser o único usuário capaz de se conectar a essa porta? Posso controlar o endereço e a porta em que o programa escuta.
Por exemplo, este programa pode ser uma versão de desenvolvimento/teste de um servidor web.
Além disso, como o servidor só aceita conexões tcp de entrada na porta 22 (ssh), estou encaminhando a porta local por ssh para poder me conectar à porta usando meu laptop. ssh -L 8080:localhost:8000 evaben@dice01
Portanto, uma solução que ainda permita isso ou algo semelhante seria boa.
Sim. Se você não for root, você só poderá ouvir nas chamadas "portas altas", ou seja, números de porta > 1024.
Não. Se você tivesse acesso root, talvez pudesse fazer algo com
iptables
, mas não há conceito de controle de acesso baseado em usuário ao aceitar conexões em uma porta.Apenas o root pode configurar firewalls.
Uma possibilidade é executar o programa em um contêiner como o Docker. Isso requer privilégios de root, mas há uma chance de você ter permissão para instanciar contêineres do Docker, mesmo que não tenha acesso de root.
Se você não tiver uma maneira direta ou indireta de configurar a proteção de rede, precisará modificar o funcionamento do programa. Faça-o ouvir em um soquete Unix em vez de TCP. Supondo que o programa esteja vinculado dinamicamente à biblioteca padrão (praticamente todos os programas estão), você não precisa alterar o programa em si, apenas a maneira como o executa. Você pode fazer isso com
LD_PRELOAD
, carregando um wrapper para a função de abertura do soquete TCP que, em vez disso, abre um soquete Unix.ttu
faz exatamente isso (de acordo com sua documentação, nunca o usei).