Bonjour,
Je suis actuellement en train de rechercher une solution pour autoriser un utilisateur non root à ouvrir un port <1024.
C'est faisable en donnant au programme de cet utilisateur la capacité (POSIX cababilities) cap_net_bind_service=+p.
Mon soucis est que cet utilisateur doit pouvoir créer d'autres executables pour lancer d'autres services sur des ports <1024.
Je cherche comment faire pour que chaque fichier qu'il va créer aie par défaut la capacité cap_net_bind_service+i ???
Merci d'avance
ob3wan
# Décomposer exécutable en lanceur + bibliothèque
Posté par Achille Fouilleul (site web personnel) . Évalué à 2.
Une idée que je n'ai pas testée.
Le lanceur pourrait ressembler à ça: (à compiler avec -std=c99 -ldl -o run-with-cap-net-bind-service)
Ce programme reçoit la capability
cap_net_bind_service
et éventuellement quelques restrictions (chgrp, chmod g+x, ...).L'utilisateur crée son code et le compile avec l'option
-shared
.Ex:
gcc -shared ... -o libmain.so
NB: le point d'entrée devient:
Pour lancer le tout: ./run-with-cap-net-bind-service libmain.so ...
# création de fichier qui sera executé en fork.
Posté par ob3wan . Évalué à 1.
Merci,
en fait mon problème ce situe plus dans le cas d'un execve.
dans ce cas le fils ne va pas forcement avoir la capacité activée, sauf si le fichier du fils l'a en inherited dans son inode.
Peut on obliger le kernel a a mettre une capacité pour toute création de fichier?
[^] # Re: création de fichier qui sera executé en fork.
Posté par fearan . Évalué à 2.
selon
http://www.kernel.org/doc/man-pages/online/pages/man7/capabilities.7.html
y a tout un blabla sur le execve ;) par contre ça manque d'un exemple pratique
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: création de fichier qui sera executé en fork.
Posté par benja . Évalué à 2.
Ben apparemment c'est pas possible vu que les capabilities autorisées par le fichier sont toujours vérifiées, donc il faut qu'elles y soient... Il n'y a que les capabilities héritables qui subsistent.
Pourquoi ne pas faire un simple script SETUID que tes utilisateurs pourront lancer sur les binaires qu'ils créent ?
[^] # Re: création de fichier qui sera executé en fork.
Posté par BFG . Évalué à 1.
Il vaut mieux utiliser sudo qui fait déjà le travail, et qui en plus permet de bien choisir ce qu'on autorise.
De plus, il me semble qu'un script shell SUID perd son SUID.
[^] # Re: création de fichier qui sera executé en fork.
Posté par benja . Évalué à 1.
Ah oui en effet ! X 2 :) merci
[^] # Re: création de fichier qui sera executé en fork.
Posté par Frédéric Perrin (site web personnel) . Évalué à 3.
Autant mettre le mot de passe de root dans /etc/issue, ça ira plus vite...
Une autre possibilité serait peut-être d'utiliser inetd, qui permet de dire que toute connexion sur le port A est redirigée sur le programe /home/userB/bin/whatever qui sera exécuter en tant que userC.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.