[Python] Introducir la contraseña de un usario desde el propio script

Iniciado por SrCooper, 21 Abril 2014, 21:19 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

Buenos días a todos, estoy creando un pequeño programa en python que recorre una lista con usuarios y ejecuta el comando para abrir firefox en cada uno de ellos.

El código es el siguiente:

Código (python) [Seleccionar]
#!/usr/bin/python

import os

lista_usuarios = ['pepe', 'mario', 'jorge']
lista_contrasenas = ['fosil', 'matrix', 'maria']

for user in lista_usuarios:
    os.system("su " + user + " '-c firefox'")


El problema es que la ejecución del script se va deteniendo para preguntarme la contraseña y esto es algo que no quiero. Me gustaría poder introducir la contraseña directamente desde el script, sabiendo que están todas guardadas en otra lista.

Un saludo y muchas gracias de antemano

Noxware

hola, soy nuevo en python y mas que nada nuevo en linux, segun lo que veo lo que te pide es contraseña root, no??? para empezar no creo que necesites ser root para esa tarea, quizas usando "sudo" en vez de "su" seria mejor... segundo, como linux es muy estricto con la seguridad si mal investigue tienes que editar cierto archivo del sistema para que no te pida la contraseña, osea permitirle ejecutarse ya con esos permisos... ya tratastes de hacerlo sin ser root??? osea ejecutar el comando asi nomas??? si necesitas root o sudo investiga lo que te dije... si no lo necesitas solo quitalo n.n
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."

daryo

con su no se pero puedes usar sudo?
Código (bash) [Seleccionar]
echo <password> | sudo -u root -S echo hola
buenas

SrCooper

Cita de: francoyo1998 en 22 Abril 2014, 21:48 PM
hola, soy nuevo en python y mas que nada nuevo en linux, segun lo que veo lo que te pide es contraseña root, no??? para empezar no creo que necesites ser root para esa tarea, quizas usando "sudo" en vez de "su" seria mejor... segundo, como linux es muy estricto con la seguridad si mal investigue tienes que editar cierto archivo del sistema para que no te pida la contraseña, osea permitirle ejecutarse ya con esos permisos... ya tratastes de hacerlo sin ser root??? osea ejecutar el comando asi nomas??? si necesitas root o sudo investiga lo que te dije... si no lo necesitas solo quitalo n.n

Creo que no me has entendido  :xD El problema no es que pida la contraseña para ejecutar esa tarea, la pide para cambiar de usuario a través de python, y lo que yo me preguntaba es si existe algún modo de escribir esta contraseña directamente desde python.

Si ejecutas este script comprobarás que la ejecución se va deteniendo para preguntarte la contraseña del usuario al que estás intentado cambiar, algo que resulta engorroso, pues son muchos usuarios y me gustaría poder introducir las contraseñas automáticamente.

Es evidente que utilizar permisos de administrador para ejecutar el script funcionaría sin problemas, y sin ni siquiera contraseñas, pero no es eso lo que estoy intentado.

Cita de: daryo en 22 Abril 2014, 22:18 PM
con su no se pero puedes usar sudo?
Código (bash) [Seleccionar]
echo <password> | sudo -u root -S echo hola

No se muy bien a que te refieres... Si te refieres a cambiar al ususario root y desde ahí cambiar a los demás usuarios (para lo cual no harían falta ni sus contraseñas) no es exactamente lo que estoy intentado, sino cambiar a cada usuario de forma individual.

Un saludo y gracias por todo  ;D

daryo

jeje creo que no me exprese muy bien .  :'(  :-(



me refiero a que asi puedes pones el password sin hacer ninguna pausa. donde puse:

Código (bash) [Seleccionar]
echo password
aca pones la clave del usuario asi no necesitas preguntarla posteriormente

Código (bash) [Seleccionar]
|
asi se pasa la clave al siguiente comando

Código (bash) [Seleccionar]
sudo -S
supongo ya sabes que hace sudo, el parametro -S permite recibir la contraseña del comando anterior


Código (bash) [Seleccionar]
-u root
se cambia a el usuario en el que deseas ejecutar

Código (bash) [Seleccionar]

echo hola

el comando a ejecutar

por ejemplo si quiero ejecutar un comando siendo mi contraseña 123 un ejemplo y mi usuario es daryo
Código (bash) [Seleccionar]
echo 123 | sudo -u daryo -S echo hola


buenas

SrCooper

#5
Ahh vale ya entiendo  ;D

He probado lo que dices y funciona perfectamente, salvo que necesito ejecutarlo como root y eso es algo que no puedo hacer. ¿Existe alguna otra forma que no requiera privilegios de administrador?

Un saludo y muchas gracias

PD: he leido algo sobre usar el comando su -c y leer la contraseña por stdin, pero la verdad no tengo ni idea de lo que significa  :xD

daryo

CitarPD: he leido algo sobre usar el comando su -c y leer la contraseña por stdin, pero la verdad no tengo ni idea de lo que significa

que se puede ejecutar un comando  por ejemplo :) , asi si solo es un comando no hace falta abrir la terminal y eso
su -c "ls"

con respecto a la duda la verdad no soy experto en programacion unix pero googleare un poco n_n

una alternativa programada en python y creo que es lo que buscas puede ser.()
http://stackoverflow.com/questions/13825689/running-a-process-as-a-different-user-from-python

Citarsalvo que necesito ejecutarlo como root y eso es algo que no puedo hacer
no necesariamente xD , el comando sudo se puede configurar para limitar los permisos en configurando el archivo sudoers
http://linuxgnublog.org/configurar-sudo-en-debian
http://www.linuxtotal.com.mx/?cont=info_admon_014

suerte
buenas

SrCooper

Pero yo no soy el administrador de la máquina, y por tanto no puedo modificar el archivo sudoers.

Y en cuanto a los links que pusiste me parecieron un poco complicados de entender, apenas llevo dos semanas programando en python  :xD

Un saludo y gracias por todo

daryo

encontre una solucion simple:

bajas este modulo http://www.noah.org/wiki/pexpect

Código (bash) [Seleccionar]
wget http://pexpect.sourceforge.net/pexpect-2.3.tar.gz
tar xzf pexpect-2.3.tar.gz
cd pexpect-2.3
sudo python ./setup.py install


luego el codigo quedaria asi

Código (python) [Seleccionar]
#!/usr/bin/env python
import pexpect
child = pexpect.spawn ('su usuario -c firefox')
child.expect ('Password: ') # busca esta cadena para continuar
child.sendline ('miclave') # aca la contraseña de usuario


;D
buenas