He creado un script bash que usa kdialog exclusivamente para interactuar con el usuario. Se inicia desde un archivo ".desktop" para que el usuario nunca vea el terminal. Se ve 100% como una aplicación GUI (aunque es solo un script bash). Se ejecuta solo en KDE (Kubuntu 12.04).
Mi único problema es manejar la entrada de contraseña de forma segura y conveniente. No puedo encontrar una solución satisfactoria.
El script fue diseñado para ejecutarse como un usuario normal y para solicitar la contraseña cuando se necesita un comando sudo por primera vez. De esta manera, la mayoría de los comandos, aquellos que no requieren derechos de sudo, se ejecutan como el usuario normal. Lo que sucede (cuando el script se ejecuta desde el terminal) es que se le solicita al usuario su contraseña una vez y el tiempo de espera de sudo predeterminado permite que finalice el script, incluidos los comandos de sudo adicionales, sin solicitar al usuario nuevamente. Así es como quiero que funcione cuando se ejecuta detrás de la GUI también.
El problema principal es que el uso kdesudo
para iniciar mi script, que es la forma estándar de la GUI, significa que el usuario root ejecuta todo el script. Entonces, la propiedad de los archivos se asigna al usuario raíz, no puedo confiar ~/
en las rutas, y muchas otras cosas son menos que ideales. Ejecutar todo el script como usuario root es solo una solución muy insatisfactoria y creo que es una mala práctica.
Agradezco cualquier idea para permitir que un usuario ingrese la contraseña de sudo solo una vez a través de GUI sin ejecutar todo el script como root. Gracias.
sudo -s
(minúsculass
) y nosudo -S
(mayúsculass
).Esto se basa en la excelente respuesta de Eric Carvalho. Lo estoy publicando para explicar el problema que encontré. Específicamente, cuando se usa esto, se pierde el tiempo de espera de sudo habitual (por ejemplo, 15 minutos). ¡Mi script, que tiene más de 50 comandos sudo, ahora solicita la contraseña del usuario más de 50 veces!
Aquí hay un ejemplo de trabajo completo de todas las partes de la solución. Consiste en un script bash, un script "myaskpass" como sugirió Eric y un archivo ".desktop". Todo debería ser 100% GUI (sin interacción del terminal), por lo que el archivo .desktop es esencial (afaik).
Y un script de prueba en sí mismo. Este le pedirá su contraseña dos veces cuando use esta solución. (Normalmente, solo se pediría una vez debido al tiempo de espera predeterminado de sudo).
fuente
sudo -A
vuelve a asignar la contraseña. Trataré de resolver esto.El siguiente script funciona a través de la línea de comando, archivo de escritorio o doble clic, solicita la contraseña solo una vez, y el patrón de comando
sudo -Sp '' <your command here> <<<${sudo_password}
se puede usar varias veces en cualquier parte del archivo:fuente