Re: ecriture sur le port //

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Guilde Mailing list
Subject: Re: ecriture sur le port //
Le mercredi 19 novembre, Xavier Deforge a écrit :
> pour piloter un petit robot connecter au port parallele, j'ai un script cgi
> appelé depuis une page web , mais j'ai un pb de droit d'acces au port //
> puisque le script est appele depuis mon serveur http.
>
> Comment permettre à ce script de s'executer "comme si " il eatit root ?


En le faisant suid-root ?

J'envisagerais un truc comme ça :

  - tu sépares dans ton programme la partie CGI de la partie accès au
    port parallèle ;
  - l'accès au port tu le fais par un programme compilé suid-root,
    lequel prend en paramètres de ligne de commande les données à
    envoyer au port ;
  - la partie CGI reste un script, qui appelle l'autre partie par
    system() ou quelque chose d'équivalent.


Une autre posibilité est d'avoir la partie qui accède au port parallèle
qui tourne en permanence : un serveur. Ton script CGI serait alors le
client qui se connecte au serveur, par exemple en utilisant des sockets
Unix. Si ça t'intéresse, regarde le thread de cette liste du 22 octobre
qui commence à

    <20322139812.20031022071335@???>


ainsi que

    http://www.edgar-bonet.org/misc/unix-ex/


où je fais exactement ça : un serveur suid-root qui écoute sur un socket
Unix et envoie des niveaux logiques sur le port parallèle. Dans la page
ci-dessus j'ai enlevé tout ce qui concerne le port parallèle, mais si tu
veux je peux t'envoyer la version complète.

Une troisième possibilité, plus simple, à laquelle je viens de penser :
tu donnes accès aux ports I/O à tout ton serveur http. Pour ça tu
wrappes ton serveur dans un programme suid root qui fait iopl(3) et
setuid(getuid()) avant de lancer le vrai serveur. C'est mieux, je pense,
que de faire tourner le serveur sous root.

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