Trucs:Exécuter un programme utilisant un port privilégié en tant que simple utilisateur

De Lea Linux
Aller à la navigation Aller à la recherche
Benjamin (prae) Gigon<bgigon AT lea-linux POINT org>

Les ports privilégiés sont des ports ne pouvant etre utilisés par un simple utilisateur et se positionne entre 0 et 1023 (inclus)
A partir de 1024, un utilisateur peut "binder"/"listen" un programme sur ses ports.

Lorsque des programmes comme bind (DNS, 53), Apache (HTTP,HTTPS), 80,443) ou autres doivent se binder sur l'un des ses ports, le programme maitre (généralement un simple forwarder de data vers des daemons possédant moins de privilège) doit etre "root" (ou utilisateur 0).

Si le programme daemon maitre est bien écrit, cela ne pose pas de problème.
Cependant, si vous etes paranoiaque, vous pouvez binder votre application maitre avec les droits d'un simple user sur un port non-privilègié mais en continuant d'utiliser le port privilègié.

Pour garder la corrélation du port d'origine avec le nouveau port non-priviliégié, nous allons déléguer la transition à l'aide d'un programme plus sécurisé (dans la mesure du possible ;-) : le kernel lui-meme.

Le moyen utilisé sera iptables et son module "REDIRECT".

Prenons un exemple avec Bind :

# /sbin/iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 10053
# /sbin/iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports 10053

Vous n'avez plus qu'à "binder" "Bind" sur le port 10053 avec l'options « listen-on port <port> { <ip>; }; ».

Vous pouvez effectuer cela avec d'autres programmes :o)

Note: pensez à bloquer le port non-privilégiés en INPUT pour éviter que deux ports soient utiliser pour