Re: Question de C

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Liste Guilde
Subject: Re: Question de C
Le lundi 12 juillet, postmaster@??? a écrit :
> J'ai trouvé dans le man d'ioperm(), l'instruction iopl() mais je
> n'arrive pas à l'utiliser. J'ai tenté de l'inclure dans mon programme
> en C (exemple : iopl(5) ) de le compiler, puis de l'executer ds un
> user quelconque, mais ca ne fonctionne toujours pas :(


Ça veut dire quoi « ça ne marche pas » ? Tu peux poster un bout de code
avec le message d'erreur exact ?

> Mon but est de pouvoir accéder aux ports parallèles dans un user
> quelconque, et ceci afin d'avoir une bonne politique sécuritaire.


D'une façon générale, il n'est pas choquant qu'il faille être root pour
accéder aux ports d'entrée-sortie. Deux façons de gérer la sécurité avec
cette contrainte sont :

  - Les programmes qui accèdent au port sont suid root. Au démarrage la
    première chose qu'ils font c'est ioperm() et juste après
    setuid(getuid()). Cette dernière commande fait perdre au processus
    ses privilèges de root.


  - Tu écris un wrapper suid root qui fait ioperm(), abandonne ses
    privilèges root et fait exec() du programme qui a besoin d'accéder
    au port. Ce dernier pourra appartenir à un utilisateur normal, c'est
    alors au wrapper d'implémenter une éventuelle politique de
    restriction d'accès.


-- 
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