Il existe une limitation historique dans la plupart des systèmes UNIX : seul les processus appartenant à root peuvent utiliser les ports réservés (dont le numéro est inférieur à 1024). Cette limite est sensée protéger le système mais elle peut poser des problèmes de sécurité; en effet cela oblige root à lancer tous les process qui utilisent des ports réservés... Heureusement la plupart des démons forkent sur un utilisateur non privilégié mais ce n'est pas toujours le cas. La plupart des demons en java par exemple doivent être lancés par root si on veut pouvoir ouvrir des ports réservés, ce qui pose un gros problème de sécurité.
Je vais vous présenter ici quelques méthodes générales qui permettent de passer outre cette limitation sous Linux, chacune ayant ses avantages et ses inconvénients...
Utiliser le setuid
chown root /chemin/executable
chmod +S /chemin/executable
Le problème avec cette méthode est que l'on s'expose à de gros problèmes de sécurité car le processus tourne avec les droits de root; si un attaquant exploite une faille dans l'executable, il se retrouve lui-même root sur la machine.
Faire une redirection de port avec iptables
L'idée est de configurer le service pour utiliser un port non réservé et de faire une redirection vers le port réservé avec une règle iptables, par exemple :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080Dans cet exemple, tout le traffic entrant sur le port 80 est redirigé vers le port 8080 sur lequel le process écoute. Le problème dans ce cas est que l'on introduit une couche supplémentaire de complexité.
Utiliser les capabilities du noyau Linux
setcap 'cap_net_bind_service=+ep'/chemin/executableSi la commande setcap n'existe pas sur votre système, il faut installer le paquet libcap ou libcap2.