Réponse courte : vous ne pouvez pas. Les ports inférieurs à 1024 ne peuvent être ouverts que par le root. Pour ce qui est du commentaire, vous pouvez utiliser la fonction CAP_NET_BIND_SERVICE Mais cette approche, appliquée à java bin, fera que tout programme java sera exécuté avec ce paramètre, ce qui est indésirable, voire un risque pour la sécurité.
La réponse longue : vous pouvez rediriger les connexions sur le port 80 vers un autre port que vous pouvez ouvrir en tant qu'utilisateur normal.
Exécuter en tant que root :
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Comme les périphériques de bouclage (comme localhost) n'utilisent pas les règles de préroutage, si vous devez utiliser localhost, etc., ajoutez également cette règle ( Merci @Francesco ) :
# iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
NOTE : La solution ci-dessus n'est pas bien adapté aux systèmes multi-utilisateurs, car tout utilisateur peut ouvrir le port 8080 (ou tout autre port élevé que vous décidez d'utiliser), interceptant ainsi le trafic. (Crédits à CesarB ).
EDIT : selon la question du commentaire - pour supprimer la règle ci-dessus :
# iptables -t nat --line-numbers -n -L
Cela donnera quelque chose comme :
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 redir ports 8088
2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080
La règle qui vous intéresse est la n°2, donc à supprimer :
# iptables -t nat -D PREROUTING 2
4 votes
Quel est le problème pour faire fonctionner le serveur sur un autre port qui n'est pas privilégié ? Vous envisagez une mesure aussi sévère que la désactivation du mécanisme de sécurité sans fournir au moins une raison très sérieuse d'exécuter un serveur sur ce port. Le serveur est-il codé en dur pour se lier au port 80 ? Si c'est le cas, jetez-le.
0 votes
Ou un message d'erreur Python :
socket.error: [Errno 13] Permission denied
6 votes
Duplicata possible de Utilisateur régulier utilisant des ports inférieurs à 1024
7 votes
Vous ne pouvez pas. Les ports inférieurs à 1024 sont privilégiés et seul root peut y ouvrir des sockets d'écoute. La chose à faire est de supprimer les permissions après l'ouverture.
6 votes
"Anonyme" - les utilisateurs du monde entier ont été formés pour rechercher certains services dans certains ports. Dans certains cas, cela a été normalisé. Par exemple, HTTP sur le port 80 et HTTPS sur le port 443. Il est assez difficile de changer les utilisateurs et les normes du monde.
1 votes
@FalconMomot Si les ports inférieurs à 1024 sont privilégiés, pourquoi le serveur Apache n'exige-t-il pas que l'on entre un mot de passe pour obtenir les privilèges root sur le port 80, et comment le font-ils de cette façon ? Je pense que l'auteur de la question veut savoir comment procéder de cette manière (qu'il soit techniquement utilisé en tant que root ou non). N'hésitez pas à me dire si je me trompe, Deepak Mittal.
1 votes
Vous utilisez un programme suid qui abandonne les privilèges après l'ouverture du port. Il est difficile, voire impossible, de faire cela en Java.