Poiché le porte 80/443 sono porte di sistema, ciò significa che possono essere utilizzate solo da utenti privilegiati
Penso che tu abbia sbagliato. Chiunque può usare queste porte. Associarsi a loro è un'operazione privilegiata.
La logica qui è che alcuni utenti Joe non dovrebbero essere in grado di scrivere un server Web dannoso e quindi creare un host su cui non ha diritti amministrativi. Naturalmente questo è un modello piuttosto debole, di solito nulla impedisce a Joe di mettere il proprio computer in rete e potrebbe avere diritti amministrativi su qualsiasi macchina a cui abbia accesso fisico.
Farò una dimostrazione con netcat.
Come utente normale, non posso associare alla porta 80:
$ nc -l -p 80
Can't grab 0.0.0.0:80 with bind : Permission denied
Posso associare alla porta 8080:
$ nc -l -p 8080
Nel frattempo in un altro terminale, posso collegarmi alla porta 80 e inviare alcuni dati, e vederli apparire alla fine del server che ho appena avviato:
$ nc 127.0.0.1 8080 <<<"Hello world"
Se voglio associare alla porta 80, devo essere root:
$ sudo nc -l -p 80
Oppure posso assegnare la CAP_NET_BIND_SERVICE
funzionalità al nc
binario:
$ cp `which nc` .
$ sudo setcap 'cap_net_bind_service=+ep' ./nc
$ ./nc -l -p 80
Un'altra opzione è quella di scrivere il programma del server in modo tale che dopo averlo chiamato listen()
abbandoni i privilegi di root. Questa è una soluzione abbastanza comune e la vedrai con la maggior parte dei demoni. Apache, ad esempio, viene avviato da init come root, quindi rilascia i privilegi di root e diventa l'utente www-data
o qualcosa di simile una volta associato alla porta 80. Prova a eseguire /etc/init.d/apache start
come non root e Apache probabilmente non si avvia.