A execução de um serviço da web que se liga à porta 80 geralmente não requer privilégios de sudoer. Como as portas 80/443 são portas do sistema, o que significa que elas só podem ser usadas por usuários privilegiados, como esses serviços ainda conseguem se conectar a essas portas?
service
permissions
port-443
adaml
fonte
fonte
Respostas:
Existem basicamente duas abordagens diferentes:
Inicialmente, comece a executar como root, vincule à porta privilegiada e, em seguida, desça para um usuário não privilegiado.
O inetd ou xinetd é executado com privilégios e encaminha as solicitações para o servidor da Web sem privilégios.
fonte
Eu acho que você entendeu errado. Qualquer pessoa pode usar essas portas. Obrigatório a eles é uma operação privilegiada.
A lógica aqui é que algum usuário Joe não deve ser capaz de escrever um servidor da Web mal-intencionado e criar um host no qual ele não tem nenhum direito administrativo. É claro que este é um modelo bastante fraco, geralmente não há nada impedindo Joe de colocar seu próprio computador na rede, e ele pode ter direitos administrativos em qualquer máquina à qual ele tenha acesso físico.
Eu vou fazer uma demonstração com o netcat.
Como usuário comum, não consigo ligar à porta 80:
Posso ligar à porta 8080:
Enquanto isso, em outro terminal, eu posso conectar à porta 80 e enviar alguns dados, e vê-los aparecer no final do servidor.
Se eu quiser ligar à porta 80, preciso ser root:
Ou posso atribuir a
CAP_NET_BIND_SERVICE
capacidade aonc
binário:Outra opção é escrever o programa do servidor, de modo que, depois de chamado
listen()
, descarte os privilégios de root. Essa é uma solução bastante comum, e você a verá com a maioria dos daemons. O Apache, por exemplo, é iniciado a partir do init como root e, em seguida, elimina os privilégios de root e se torna o usuáriowww-data
ou algo semelhante quando estiver ligado à porta 80. Tente executar/etc/init.d/apache start
como não root e o Apache provavelmente falhará ao iniciar.fonte