¿Cómo llamo a un diálogo para autenticación?

13

Estoy escribiendo un programa gui usando el módulo wx en python. En el programa cada vez que accedo a una carpeta que requiere privilegio de root, entonces me pide contraseña en la terminal pero quiero mostrar el diálogo al usuario para ingresar la contraseña y autenticarlo. ¿Cómo llamar a ese diálogo y autenticar al usuario en ubuntu?

rupali
fuente
Usted escribe que "pide contraseña en la terminal" ¿eso significa que está llamando a los comandos de sudo terminal desde python?
TLE
Creo que es probable que debas usar PolicyKit en lugar de hacerlo sudo, pero no tengo suficiente conocimiento de Python o PolicyKit para escribir una buena respuesta que explique cómo. Quizás alguien más pueda.
Eliah Kagan
¿Cómo vas a usar esto? simplemente ejecutando un comando
margarita

Respuestas:

9

Hay dos preguntas y respuestas diferentes en stackoverflow que responden a su pregunta: aquí y aquí .

Ambas respuestas usan el comando gksudo(ya mencionado por @khamer). Si ejecuta gksudo command(también sin python) básicamente hará lo que sudohace, pero con una interfaz gráfica, es decir, solicite al usuario una contraseña y luego ejecute el comando como root si el usuario está en el archivo sudoers.

Para implementar la solución sugerida a partir de las respuestas vinculadas en python, puede usar algo como se muestra en el siguiente ejemplo:

Crea un archivo run.py:

#!/usr/bin/python

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

Y un archivo create.py:

#!/usr/bin/python

# Create test file..
f = file("mytestfile", "w")

Luego, ejecute python run.pyy luego de ingresar su contraseña, se creará un archivo propiedad de root. Si lo ejecuta python create.py, será de su propiedad (el archivo no debe existir antes de ejecutar el script).

lumbric
fuente
3

Si bien estoy seguro de que hay una solución python más elegante, la versión sucia y baja es usar gksudo. gksudo hace lo mismo que sudo, excepto que crea ese diálogo para la autenticación que mencionaste en lugar de preguntar en la línea de comando.

Ver https://help.ubuntu.com/community/RootSudo#Graphical_sudo

Khamer
fuente
Dado que esta es una pregunta sobre la programación para Ubuntu en Python, ¿puede dar un ejemplo de código que muestre cómo usar gksu/ gksudoen un programa Python?
Eliah Kagan
@EliahKagan ¡Escribí una respuesta con un ejemplo que espero satisfaga tus demandas! :)
lumbric
0

Inserta este script en tu código:

import os

Password = raw_input('Please enter your root password!')

sudo_command = '<your command>'

execute = os.system('echo %s|sudo -S %s' % (Password, sudo_command))
upapilot
fuente