Le mercredi 22 octobre, Philippe Beau a écrit :
> un daemon fonctionnant sur la machine va ecouter les informations qui
> proviennent de /tmp/secure/toto.sock et faire une action en
> conséquence. je suis plus clair ?
Et Frédéric Mantegazza a répondu :
> Dans ton exemple, tu n'utilises pas les sockets, mais soit un fichier,
> soit un pipe nomme. C'est different. Est-ce bien ce que tu veux ?
Pourquoi tu dis ça ? /tmp/secure/toto.sock peut très bien être un socket
Unix. Les sockets Unix, tout comme les pipes nommés, ont une entrée dans
le système de fichiers. En fait les sockets Unix ressemblent beaucoup
aux pipes nommés sauf que :
- ils sont bidirectionnels ;
- plusieurs clients peuvent se connecter indépendamment au même
socket ;
- ça utilise l'API socket.
Philippe :
> je veux faire transiter des infos d'un programme a l'autre, sur une
> machine en LOCAL. Donc le souci du socket, c'est que ca ouvre un port,
> meme si c'est sur l'interface lo, je pense que c'est dangereux, qu'en
> penses-tu ?
Les sockets Unix n'ouvrent pas de ports. L'exemple que t'a donné
Frédéric utilise un socket Internet qui, contrairement à un socket Unix,
ouvre un port sur la machine. Ceci dit, si le port est ouvert uniquement
sur lo, c'est aussi sûr qu'un socket Unix. C'est juste moins efficace
car tu passes inutilement à travers la pile TCP/IP du système.
Frédéric :
> Ceci-dit, je ne suis pas sur que tout ca soit le solution la plus simple. A
> mon avis, executer un petit script qui a les droits suid, et qui lui-meme
> va lancer les commandes voulues peut-etre suffisant. Mais *attention*:
> reflechis bien a ce que tu fais, car c'est la porte ouverte a des failles
> de securite !!!
Je suis d'accord.
Et Philippe :
> c'est pour ca que je me creuse la tete entre les sockets et toutes les
> autres versions possibles !
Ça ne change pas grand chose au niveau sécurité. Le script PHP en suid
root est dangereux car il traite des données venues de l'extérieur. Du
coup s'il est mal codé il peut se laisser abuser par ces données et
faire des choses qu'il ne devrait pas faire. Le serveur suid root que tu
envisages est dangereux car il traite des données venues de l'extérieur.
Du coup s'il est mal codé il peut se laisser abuser par ces données et
faire des choses qu'il ne devrait pas faire.
Ton serveur peut peut-être améliorer la sécurité en isolant les tâches à
faire sous root des autres => moins de choses suid root, moins de risque
de bogues. Mais tu peux peut-être faire cette séparation des tâches en
PHP : un script qui appelle un autre suid root, lequel fait juste ce
qu'il faut faire sous root.
Moralité : il faut surtout bien penser à valider toutes les données que
tu reçois avant de faire quoi que ce soit avec. L'option -T (taint) de
Perl est pratique pour t'aider à vérifier que tu n'as rien oublié.
Pour ce qui est des sockets Unix : j'ai codé un système client-serveur
qui les utilise. C'était surtout pour avoir deux « threads » de mon
application avec espaces d'adressage séparés (ce sont donc des
processus...). Le serveur est suid root et temps réél : il doit mettre à
jour le champ magnétique de ma manip toutes le millisecondes. Le client
n'a pas ce genre de contraintes de temps. Si ça t'intéresse je peux
t'envoyer ça, mais ce n'est pas très différent des sockets Internet pour
lesqueles Frédéric t'a envoyé un exemple.
Edgar.
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org