2011-06-03 12 views
5

He estado jugando con subproceso últimamente. Como hago más y más; Me encuentro necesitando acceso a la raíz. Me preguntaba si hay una manera fácil de ingresar la contraseña de root para un comando que lo necesite con un módulo de subproceso. Entonces, cuando me piden la contraseña de mi script, la proporciono y ejecuto el comando. Sé que esta es una mala práctica según la cual el código se ejecutará en un espacio aislado y separado del resto del sistema; Tampoco quiero ejecutar como root.Ejecutando comandos dentro de python que necesitan acceso raíz

Realmente apreciare un pequeño ejemplo si es posible. Sé que puedes hacer esto con la expectativa, pero estoy buscando algo más centrado en Python. Sé pexpect exsists pero es un poco exagerado para esta simple tarea.

Gracias.

+0

Realmente no entiendo la frase "Entonces, cuando me piden la contraseña, la guion la proporciono y ejecuto el comando". ¿Desea que el usuario ingrese la contraseña de root, o desea codificar de forma rígida la contraseña de root en su código? (¡Espero que no sea lo último!) –

+0

@Sven Me gustaría hacer las dos cosas; Sé que este último es malo. Me pregunto si es posible. – myusuf3

+0

Agradeceríamos un pequeño ejemplo de lo que ha intentado, si es posible. –

Respuesta

8

Probablemente sea mejor aprovechar sudo para el usuario que ejecuta el programa Python. Puede especificar comandos y argumentos específicos que se pueden ejecutar desde sudo sin requerir una contraseña. Aquí hay un ejemplo:

Hay muchos enfoques, pero prefiero el que asigna grupos de comandos a grupos. Entonces, digamos que queremos crear un grupo para permitir que las personas ejecuten 'tcpdump' como root. Así que llamemos a ese grupo tcpdumpers.

Primero crearía un grupo llamado tcpdumpers. A continuación, modifique /etc/sudoers:

# Command alias for tcpdump 
Cmnd_Alias  TCPDUMP = /usr/sbin/tcpdump 

# This is the group that is allowed to run tcpdump as root with no password prompt 
%tcpdumpers  ALL=(ALL) NOPASSWD: TCPDUMP 

Ahora cualquier usuario agregado al grupo tcpdumpers será capaz de ejecutar tcpdump como esto:

% sudo tcpdump 

Desde allí se puede fácilmente ejecutar este comando como un subproceso.

Esto elimina la necesidad de codificar la contraseña de root en el código del programa y permite un control detallado de quién puede ejecutar qué con privilegios de administrador en su sistema.

+0

Hace poco tuve que hacer algo similar para un script de alerta de splunk. sudo está hecho para esto. – Ori

+1

Tenga en cuenta que editar el archivo sudoers realmente debería hacerse con 'visudo', en lugar de con cualquier otro editor arbitrario; de lo contrario, puede generar cosas como http://unix.stackexchange.com/questions/138237/i-changed-etc- sudoers-and-now-i-cant-run-as-sudo – godlygeek

Cuestiones relacionadas