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

Python Discussion :

Changer le user id d'un process (os.setuid) Linux


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Changer le user id d'un process (os.setuid) Linux
    Bonjour à tous,

    Je vous explique mon objectif : je suis user1, sous Linux, et j'ai un script python qui à un moment donné doit exécuter des commandes en tant que user2.

    je possède les mot de passes, des deux comptes et peut donc effectuer des chmod ou chown a volonté pour permettre de réaliser mon objectif. J'ai cependant tout essayé mais je n'y arrive pas je tombe tout le temps sur une erreur de permission denied :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
    user2_uid=XXX
    os.setuid(user2_uid)
    os.system('whoami')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    File "toto.py", line 3, in <module>
        os.seteuid(user2_uid)
    OSError: [Errno 1] Operation not permitted
    mon souhait serait de lancer mon programme en tant que user1 et qu'après la commande os.setuid(user2_uid), le os.system('whoami') me donne user2.
    J'ai essayé en positionnant le suid bit et le sgid bit, j'ai essayé de compiler le code python en pyc car il m'a semblé lire que ces bits ne peuvent être utilisés qu'avec du code compilé, j'ai essayé os.seteuid aussi, j'ai essayé en donnant le fichier.py à user2 etc.

    A noter que user1 et user2 appartiennent au même groupe.

    Si quelqu'un à une piste sur comment utiliser correctement os.setuid (en espérant que sa seule utilisation ne soit pas de root vers un autre utilisateur !) Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Je réponds à ma propre question avec plutôt une sorte de contournement ...

    En fait on ne peut à priori utiliser le SUID bit que sur du code compilé donc il faut lancer via subprocess.Popen du code en c de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        euid=geteuid();
        setreuid(euid,euid);
        execv(path_program,parameters);
    Il faut ensuite que le code compilé soit propriété de l'utilisateur désiré (user_2 par ex), et positionner le SUID bit. Lors de l'exécution de ce programme, on devient naturellement user_2, on positionne en plus le effective uid à user_2 et on peut ainsi relancer du code scripté en tant que user_2 ...

    pas réussi à faire mieux ...

Discussions similaires

  1. Windows authentication : peut-on changer de "user" ?
    Par PhunkyBob dans le forum Outils
    Réponses: 3
    Dernier message: 27/08/2010, 16h24
  2. changer les users d'un groupe d'un site a l'autre
    Par xenosender dans le forum SharePoint
    Réponses: 2
    Dernier message: 02/03/2009, 12h12
  3. Subclipse : changer de user
    Par remika dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/08/2008, 11h09
  4. Changer de user dans un shell
    Par Matmal11 dans le forum Linux
    Réponses: 3
    Dernier message: 12/09/2006, 18h17
  5. [AutoLogin] Ne peux plus changer de user
    Par BenoitM dans le forum Windows XP
    Réponses: 4
    Dernier message: 14/12/2005, 10h15

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