setcap 'cap_net_bind_service=+ep' /path/to/program
funzionerà per processi specifici. Ma per consentire a un particolare utente di collegarsi a porte inferiori a 1024 dovrai aggiungerlo a sudoers.
Dai un'occhiata a questa discussione per saperne di più.
(Alcuni di questi metodi sono stati menzionati in altre risposte; sto dando diverse possibili scelte in ordine approssimativo di preferenza.)
Puoi reindirizzare la porta bassa a una porta alta e ascoltare sulla porta alta.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Puoi avviare il tuo server come root e rilasciare i privilegi dopo che ha iniziato ad ascoltare sulla porta privilegiata. Preferibilmente, piuttosto che codificarlo tu stesso, avvia il tuo server da un wrapper che fa il lavoro per te. Se il tuo server avvia un'istanza per connessione, avviala da inetd
(o un programma simile come xinetd
). Per inetd
, utilizza una riga come questa in /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Se il tuo server è in ascolto in una singola istanza, avvialo da un programma come authbind
. Crea un file vuoto /etc/authbind/byport/80
e renderlo eseguibile per l'utente che esegue il server; o crea /etc/authbind/byuid/1234
, dove 1234 è l'UID che esegue il server, contenente la riga 0.0.0.0/0:80,80
.
Se l'eseguibile del tuo server è archiviato su un filesystem che supporta le funzionalità, puoi assegnargli cap_net_bind_service
capacità. Fai attenzione che le funzionalità sono ancora relativamente nuove e presentano ancora qualche problema.
setcap cap_net_bind_service=ep /path/to/server/executable
La risposta breve è che questo non è possibile per progettazione.
La risposta lunga è che nei mondi open source ci sono molte persone che giocano con il design e escogitano metodi alternativi. In generale è prassi ampiamente accettata che ciò non sia possibile. Il fatto che tu stia provando probabilmente significa che hai un altro errore di progettazione nel tuo sistema e dovresti riconsiderare l'intera architettura del tuo sistema alla luce delle migliori pratiche *nix e delle implicazioni sulla sicurezza.
Detto questo, un programma per autorizzare l'accesso non root alle porte basse è authbind. Sia selinux che grsecurity forniscono anche framework per tali autenticazioni ottimizzate.
Infine, se vuoi che utenti specifici eseguano programmi specifici come root e ciò di cui hai veramente bisogno è solo consentire a un utente di riavviare Apache o qualcosa del genere, sudo
è tuo amico!