Por que as primeiras portas 1024 são restritas apenas ao usuário root?

53

Isso é mais curiosidade ociosa do que qualquer outra coisa. Um amigo meu me perguntou: 'qual é o intervalo de portas que somente o root pode usar no Linux?' Eu disse a ele que 0-1024 eram restritos. Então ele me perguntou por que era assim e ... eu estava perdida. Nenhuma idéia.

Existe uma razão para essas portas serem restritas e 1025-65535 não?

A maioria dos principais serviços de rede (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP etc.) estão nesse intervalo, portanto, possíveis respostas que pensei:

  • Um usuário não confiável pode executar um programa que ouviu nessas portas para obter detalhes de logon.
  • Um usuário não confiável pode executar um aplicativo de servidor não autorizado.

Alguém pode lançar luz aqui?

Andrew Lambert
fonte

Respostas:

52

Suponha que você esteja trocando dados com um computador em uma porta <1024 e saiba que o computador está executando alguma variante do unix. Então você sabe que o serviço em execução nessa porta é aprovado pelo administrador do sistema: está sendo executado como root ou, pelo menos, teve que ser iniciado como root.

No mundo amplo e selvagem da Internet, isso não importa. A maioria dos servidores é administrada pelas mesmas pessoas que os serviços executados neles; você não confiaria mais nas raízes do que nos outros usuários.

Com máquinas multiusuário, especialmente em uma rede local, isso pode importar. Por exemplo, nos dias antes criptografia civil, um método popular de executar comandos shell em outra máquina foi rsh( r emote sh ell); você poderia usar a autenticação por senha ou autenticar apenas provando que era usuário X na máquina A (com a máquina B sabendo que X @ A poderia efetuar login como X @ B sem senha). Como provar isso? O rshcliente é root setuid e usa um número de porta <1024; portanto, o servidor sabe que o cliente com o qual está falando é confiável e não mentirá sobre qual usuário de A está chamando. Da mesma forma NFS foi projetado para ser transparente com relação aos usuários e permissões; portanto, uma configuração comum era que, em uma rede local, todas as máquinas usavam o mesmo banco de dados do usuário, e o usuário N em A que monta sistemas de arquivos do servidor B obtém as permissões do usuário N em B. Novamente, o fato de o cliente NFS ser proveniente de um número de porta <1024 prova que a raiz de A examinou o cliente NFS, que deve garantir que, se ele transmitir uma solicitação que supostamente seja do usuário N, essa solicitação será realmente do usuário N.

Usuários não autorizados não podem executar servidores em portas baixas é outro benefício, mas não o principal. Naquela época, a falsificação era uma novidade e os usuários que executavam servidores falsificados eram rapidamente reprimidos pelos administradores vigilantes de qualquer maneira.

Gilles 'SO- parar de ser mau'
fonte
2
Então, uma espécie de autenticação de pobre, então? Esta convenção tem algum benefício real nos sistemas operacionais modernos * nix?
Andrew Lambert
2
@Amazed: O mundo unix é conservador, então a pergunta a fazer é "Isso causa algum problema real?" (e deve-se responder com pleno conhecimento de que todo servidor que vale a pena executar possui um argumento de linha de comando para alterar a porta).
dmckee
5
@dmckee também se pode argumentar que esse design leva a que mais servidores sejam executados como root, mesmo que eles tenham a opção de rodar em portas alternativas.
Andrew Lambert
5
@Amazed Ainda hoje pode ser útil hoje, em redes locais. Eu não acho que isso leve a mais servidores executando como root, os serviços podem vincular a porta e, em seguida, descartar privilégios ou usar recursos, se disponíveis, ou o administrador pode redirecionar uma porta na configuração do firewall. Eu não acho que seria colocado se o unix fosse projetado hoje, mas não dói.
Gilles 'SO- stop be evil'
11
Esse absurdo deve ter desaparecido por muito tempo do kernel. Nenhum número de porta deve ter um significado especial. O "raciocínio" por trás desse design está desatualizado há muito tempo (eu acho que era controverso mesmo no momento do design). Mas o pior é que a idéia de qualquer faixa de número especial que seja "confiável" são as implicações. Servidores da Web precisam ser executados como root apenas para servir páginas da Web. Uma única exploração e o servidor do furo se foram. E para que? Para design legado que nunca funcionou levemente.
masi