Usando sudo con script Python

Resuelto Roman Rdgz asked hace 11 años • 14 respuestas

Estoy intentando escribir un pequeño script para montar una carpeta compartida de VirtualBox cada vez que ejecuto el script. Quiero hacerlo con Python, porque estoy tratando de aprenderlo para crear secuencias de comandos.

El problema es que necesito privilegios para iniciar el comando de montaje. Podría ejecutar el script como sudo, pero prefiero que lo haga solo.

Ya sé que no es seguro escribir tu contraseña en un archivo .py, pero estamos hablando de una máquina virtual que no es crítica en absoluto: solo quiero hacer clic en el script .py y hacerlo funcionar.

Este es mi intento:

#!/usr/bin/env python
import subprocess

sudoPassword = 'mypass'
command = 'mount -t vboxsf myfolder /home/myuser/myfolder'

subprocess.Popen('sudo -S' , shell=True,stdout=subprocess.PIPE)
subprocess.Popen(sudoPassword , shell=True,stdout=subprocess.PIPE)
subprocess.Popen(command , shell=True,stdout=subprocess.PIPE)

Mi versión de Python es 2.6

Roman Rdgz avatar Oct 24 '12 15:10 Roman Rdgz
Aceptado

Muchas respuestas se centran en cómo hacer que su solución funcione, mientras que muy pocas sugieren que su solución es un enfoque muy malo . Si realmente quieres "practicar para aprender", ¿por qué no practicar usando buenas soluciones? ¡Codificar su contraseña es aprender el enfoque equivocado !

Si lo que realmente desea es una contraseña sin contraseña mountpara ese volumen, ¡tal vez sudono sea necesaria en absoluto ! ¿Puedo entonces sugerir otros enfoques?

  • Úselo /etc/fstabcomo sugiere Mensi . Utilice opciones usery noautopermita que los usuarios habituales monten ese volumen.

  • Úselo Polkitpara acciones sin contraseña: configure un .policyarchivo para su secuencia de comandos <allow_any>yes</allow_any>y suéltelo en/usr/share/polkit-1/actions

  • Edite /etc/sudoerspara permitir que su usuario use sudosin escribir su contraseña. Como sugirió @Anders, puede restringir dicho uso a comandos específicos, evitando así privilegios ilimitados de root sin contraseña en su cuenta. Consulte esta respuesta para obtener más detalles sobre /etc/sudoers.

Todo lo anterior permite privilegios de root sin contraseña, ninguno requiere que usted codifique su contraseña. Elija cualquier enfoque y puedo explicarlo con más detalle.

En cuanto a por qué es una muy mala idea codificar contraseñas, aquí hay algunos buenos enlaces para leer más:

  • Por qué no debería codificar sus contraseñas al programar
  • Cómo mantener secretos en secreto (alternativas a la codificación de contraseñas)
  • ¿Qué es más seguro? ¿Codificar credenciales o almacenarlas en una base de datos?
  • Uso de credenciales codificadas, un error de programación peligroso: CWE
  • Las contraseñas codificadas siguen siendo una falla de seguridad clave
MestreLion avatar Jun 17 '2014 07:06 MestreLion
sudoPassword = 'mypass'
command = 'mount -t vboxsf myfolder /home/myuser/myfolder'
p = os.system('echo %s|sudo -S %s' % (sudoPassword, command))

Pruebe esto y avíseme si funciona. :-)

Y éste:

os.popen("sudo -S %s"%(command), 'w').write('mypass')

Aniket Inge avatar Oct 24 '2012 08:10 Aniket Inge