¿Cómo solicito contraseña por solicitud de GUI mientras uso sudo en script?

13

Utilizo Trisquel GNU / Linux con GNOME Flashback Desktop Environment. Necesito una solicitud de contraseña de GUI para que el usuario ejecute el comando con el sudoscript. Ejemplo considere el siguiente script:

zenity --question --text="Do you want to install this package?"
if [[ $? -eq 0 ]]; then sudo apt-get install package
else zenity --warning
fi

Que se ejecutará de la siguiente manera (Ejecutar), es decir, no dentro del terminal:

captura de pantalla

Por lo tanto, es necesario solicitar una contraseña para ejecutar el comando; de lo sudocontrario, no puede hacer un trabajo.

Por lo tanto, ¿cómo solicito la contraseña por solicitud de GUI?

Pandya
fuente

Respuestas:

18

Puede solicitar la contraseña mediante el indicador de GUI con la ayuda de -A, --askpass.

Desde la página del manual:

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A
                 (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's
                 password and output the password to the standard output.  If the SUDO_ASKPASS environment variable
                 is set, it specifies the path to the helper program.  Otherwise, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

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

                 If no askpass program is available, sudo will exit with an error.

Por lo tanto, puede hacer un programa de ayuda gráfica como el ssh-askpassque solicita a un usuario una frase de contraseña usando GNOME:

$ which ssh-askpass
/usr/bin/ssh-askpass

Entonces, agregue la siguiente línea a /etc/sudo.conf:

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

Y encontrará el mensaje de contraseña de la GUI:

captura de pantalla1

También puedes usar otro programa como zenityese. Ejemplo que uso a continuación:

$ cat /etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/local/bin/zenity_passphrase

¿Dónde zenity_passphrasese configura un script personalizado para usarlo directamente como comando?

$ cat $(which zenity_passphrase)
#!/bin/bash
zenity --password --title="sudo password prompt" --timeout=10

Que funciona como:

captura de pantalla2


Nota:

  • También puede usar gksudo(interfaz GTK + para su y sudo) en lugar de sudoen el script que pregunta con el indicador de GUI:

    captura de pantalla3

  • También puede usar pkexec( aplicación polkit ) con algunas aplicaciones / comandos (para otros debe configurarse):

    captura de pantalla

Pandya
fuente
Cuando se usa pkexec, por ejemplo pkexec leafpad, se da Cannot open display:después de ingresar la contraseña. ¿Se necesita alguna configuración adicional?
GTRONICK
PruebaDISPLAY=:0 pkexec leafpad
Pandya
Todavía no funciona, Cannot open display:aparece el mismo mensaje
GTRONICK