2010-11-06 8 views
6

Une partie de mon programme python a besoin d'un accès administrateur. Comment puis-je obtenir les privilèges root à l'aide d'une fenêtre contextuelle GUI similaire à la commande gksudo? Je n'ai besoin que des privilèges root pour une petite partie de mon programme, il serait donc préférable de n'avoir les privilèges que pour une fonction particulière.Comment gagner des privilèges root en python via un sudo graphique?

J'espère pouvoir faire quelque chose comme:

gksudo(my_func, 'description of why password is needed') 

Répondre

3

Vous avez deux options:

Vous devrez faire la partie du programme qui nécessite la racine privilèges d'un fichier séparé et puis exécutez le fichier comme ceci:

>>> import subprocess 
>>> subprocess.call(['gksudo','python that_file.py']) 

qui apportera l'invite de mot de passe et exécuter that_file.py en tant que root

Vous pouvez également exiger qu'un programme soit exécuté en tant que root de la commencer et juste avoir le programme l'utilisateur tape "gksudo python your_program.py" dans la ligne de commande depuis le début ce qui n'est évidemment pas la meilleure idée si votre programme est normalement lancé à partir d'un menu.

5

gksudo peut être utilisé pour lancer des programmes en cours d'exécution avec des privilèges d'administrateur. La partie de votre application qui doit s'exécuter en tant que root doit pouvoir être appelée en tant que processus distinct de la ligne de commande. Si vous avez besoin d'une forme de communication entre les deux, vous pouvez utiliser les sockets ou regarder un fichier, etc.

+1

Mais si vous utilisez des sockets, assurez-vous qu'un attaquant ne puisse pas se connecter au programme gksudoed. À mon humble avis, il serait préférable d'utiliser DBUS ou plus (spécifique à la session). – thejh

+0

Si vous choisissez cette option, vous devez utiliser le module 'subprocess' au lieu d'utiliser' os.system'. http://docs.python.org/library/subprocess.html –

Questions connexes