setcap 'cap_net_bind_service=+ep' /path/to/program
cela fonctionnera pour des processus spécifiques. Mais pour permettre à un utilisateur particulier de se lier à des ports inférieurs à 1024, vous devrez l'ajouter à sudoers.
Consultez cette discussion pour en savoir plus.
(Certaines de ces méthodes ont été mentionnées dans d'autres réponses ; je donne plusieurs choix possibles dans un ordre approximatif de préférence.)
Vous pouvez rediriger le port bas vers un port haut et écouter sur le port haut.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Vous pouvez démarrer votre serveur en tant que root et supprimer les privilèges après qu'il ait commencé à écouter sur le port privilégié. De préférence, plutôt que de coder cela vous-même, démarrez votre serveur à partir d'un wrapper qui fait le travail pour vous. Si votre serveur démarre une instance par connexion, démarrez-la à partir de inetd
(ou un programme similaire tel que xinetd
). Pour inetd
, utilisez une ligne comme celle-ci dans /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Si votre serveur écoute en une seule instance, démarrez-le à partir d'un programme tel que authbind
. Soit créer un fichier vide /etc/authbind/byport/80
et le rendre exécutable par l'utilisateur exécutant le serveur ; ou créez /etc/authbind/byuid/1234
, où 1234 est l'UID exécutant le serveur, contenant la ligne 0.0.0.0/0:80,80
.
Si l'exécutable de votre serveur est stocké sur un système de fichiers qui prend en charge les fonctionnalités, vous pouvez lui attribuer le cap_net_bind_service
aptitude. Attention, les fonctionnalités sont encore relativement nouvelles et présentent encore quelques défauts.
setcap cap_net_bind_service=ep /path/to/server/executable
La réponse courte est que ce n'est pas possible par conception.
La réponse longue est que dans les mondes open source, il y a beaucoup de gens qui jouent avec la conception et proposent des méthodes alternatives. En général, il est largement admis que cela ne devrait pas être possible. Le fait que vous essayiez signifie probablement que vous avez un autre défaut de conception dans votre système et que vous devez reconsidérer l'ensemble de votre architecture système à la lumière des meilleures pratiques *nix et des implications en matière de sécurité.
Cela dit, un programme pour autoriser l'accès non root aux ports bas est authbind. selinux et grsecurity fournissent également des cadres pour ces authentifications fines.
Enfin, si vous voulez que des utilisateurs spécifiques exécutent des programmes spécifiques en tant que root et que vous avez vraiment besoin de permettre à un utilisateur de redémarrer apache ou quelque chose comme ça, sudo
est votre ami !