IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Problème d'accès à la fonction : " setuid ", sous Kubuntu.


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 61
    Points : 28
    Points
    28
    Par défaut Problème d'accès à la fonction : " setuid ", sous Kubuntu.
    Bonjour.
    Je cherche à être super utilisateur dans un programme en C++, je dois accéder aux port parallèles du PC.
    J'ai donc mis ; setuid (0) dans le main, pour pouvoir obtenir une autorisation : ioperm(0x300,3,1).

    Cependant cela ne passe pas.
    Apparemment c'est un problème de montage de disque, la partie du disque ou est placé mon compilateur QT, et g++ interdit les exécution setuid .

    Je suis sous Kubuntu.
    Comment faire pour pouvoir compiler directement avec QT et g++, en exécutant des fonctions : " setuid " ?
    Voici le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    setuid (0);
     
    ioperm(0x300,3,1);
        /* Obtention de l'accès aux ports */
         if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
         /* Initialisation de tous les signaux de données (D0-D7) à l'état bas (0) */
         outb(0, BASEPORT);
         /* Dormons pendant un moment (100 ms) */
         usleep(100000);
         /* Lecture sur le port d'état (BASE+1) et affichage du résultat */
         cout  <<  inb(BASEPORT + 1);
         cout << endl;
         /* Nous n'avons plus besoin de l'accès aux ports */
         if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
    Merci.

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    même problème, donc même réponse

    à savoir que tu ne peux pas faire un setuid(0) dans le code comme ça si simplement, sinon imagine, n'importe quel programme pourrait passer root juste en mettant une ligne dans son code source

    il y a plusieurs façons de faire, tout dépend de tes motivations :

    • la plus simple c'est d'exécuter directement le programme en root, on est tranquille, ça marche, seul inconvénient on est obligé de passer sous le compte root explicitement, entrer le mot de passe etc. pas pratique
    • on peut également mettre un emballage autour avec un joli noeud du genre sudo, le propos reste le même, c'est légèrement moins simple car il faut configurer le fichier /etc/sudoers correctement, l'avantage c'est qu'on peut ensuite lancer le binaire éventuellement sans mot de passe, l'inconvénient c'est qu'il suffit d'avoir accès à un compte non-privilégié pour le lancer, et si le programme comporte une faille... game over.
    • on peut aussi envisager de jouer du chmod à la one-again sans chercher à trop comprendre, en rendant le programme setuid root, pas besoin de mot de passe, n'importe qui qui exécute le binaire l'exécute en root, et pareil que précédemment, s'il y a une faille dans le programme et qu'un pirate parvient à l'exploiter tu peux formater la machine, c'est communément considéré comme une pratique dangereuse
    • enfin il y a la bonne façon de faire, qui consiste à jouer du chown et chmod pour mettre un bit setuid root sur le binaire, mais en maitrisant en plus la façon dont sont gérés les (e|r|s)(u|g)id à l'intérieur du programme. A cet effet on conseille tout bonnement de bien comprendre ls tenants et aboutissants en lisant de la doc sur le sujet [1][2][3], l'inconvénient tu l'auras compris c'est que c'est compliqué à mettre en place correctement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Je veux simplement accéder au port parallèle, faire un programme, qui ouvre et ferme la sortie

    C'est tout
    Je voudrais pouvoir compiler directement avec QT.

Discussions similaires

  1. Problème d'accès à une fonction js insérée dans un div via XSLT
    Par Piper1664 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/07/2006, 11h58
  2. [Mail] Problème d'accès à une fonction
    Par Lordsephiroth dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo