Solicite gráficamente la contraseña en un script bash y conserve la configuración predeterminada de sudo timeout

9

La sudo -Aopción (SUDO_ASKPASS) aparentemente hace que sudo pierda la configuración de tiempo de espera (por ejemplo, timestamp_timeout).

Quiero usar la opción sudo -A pero quiero conservar el tiempo de espera predeterminado (por ejemplo, 15 minutos en Ubuntu) en un script bash. Quiero solicitar la contraseña del usuario de forma segura y en un cuadro de diálogo GUI, pero solo quiero solicitar mi script una vez (no más de 50 veces).

Además, no quiero ejecutar mi script completo como usuario root porque creo que es una mala idea. Además, los archivos creados por mi script tienen la propiedad incorrecta en este caso.

La opción sudo -A funcionaría para mí si conservara el tiempo de espera predeterminado.

Del manual de sudo:

Opción: -A

Normalmente, si sudo requiere una contraseña, la leerá desde el terminal del usuario. Si se especifica la opción -A (askpass), se ejecuta un programa auxiliar (posiblemente gráfico) para leer la contraseña del usuario y enviar la contraseña a la salida estándar. Si se establece la variable de entorno SUDO_ASKPASS, especifica la ruta al programa auxiliar. De lo contrario, si /etc/sudo.conf contiene una línea que especifica el programa askpass, se usará ese valor. Por ejemplo:

# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass

Por cierto, kdesudo tiene este mismo problema: requiere la contraseña cada vez que se llama, incluso un segundo después en el mismo script.

Estoy usando Kubuntu 12.04 64 bit.

Aquí hay un ejemplo de trabajo completo de todas las partes de la solución. Consiste en un script bash, un script "myaskpass" como se sugiere aquí y un archivo ".desktop". Todo debería ser 100% GUI (sin interacción del terminal), por lo que el archivo .desktop es esencial (afaik).

$ cat myaskpass.sh 
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0


$ cat askpasstest1.desktop 
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=

Y un script de prueba en sí mismo. Este le pedirá su contraseña dos veces cuando use esta solución.

#!/bin/bash

sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log

exit 0
MountainX
fuente
2
¿ gksudoNo es una opción aquí? linux.die.net/man/1/gksudo
slm
Estoy en KDE, por lo que gksudo no es una opción para mí, pero me dijeron que funciona igual que kdesudo. kdesudosufre el mismo problema que describo anteriormente. Estaba probando sudo -Acomo una alternativa kdesudoy es mejor para mi situación, pero no resuelve el problema del tiempo de espera (al menos hasta ahora).
MountainX

Respuestas:

7

Agrego esto a mi script bash:

# ask for password up-front.
sudo -v
# Keep-alive: update existing sudo time stamp if set, otherwise do nothing.
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

Lo encontré aquí:

/server/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

https://gist.github.com/cowboy/3118588

Uso otro script para iniciar mi script principal y uso un archivo .desktop para iniciar ese script de ayuda. No es muy sencillo, pero se puede hacer que funcione 100% GUI. Todavía estoy buscando la solución perfecta, pero esto está haciendo el truco por ahora.

MountainX
fuente
1

¿Qué tal gksudo ?

$ gksudo your_app_launcher.sh

Muestra un cuadro de diálogo gráfico para ingresar de forma segura la contraseña de administrador.

woohoo
fuente