Demander graphiquement le mot de passe dans un script bash et conserver le paramètre de délai d'attente sudo par défaut


9

L' sudo -Aoption (SUDO_ASKPASS) fait apparemment perdre sudo le paramètre timeout (par exemple, timestamp_timeout).

Je veux utiliser l'option sudo -A mais je veux conserver le délai d'expiration par défaut (par exemple, 15 minutes sur Ubuntu) dans un script bash. Je veux demander le mot de passe de l'utilisateur en toute sécurité et dans une boîte de dialogue GUI, mais je ne veux demander qu'une seule fois mon script (pas plus de 50 fois).

De plus, je ne veux pas exécuter tout mon script en tant qu'utilisateur root car je pense simplement que c'est une mauvaise idée. De plus, les fichiers créés par mon script ont la mauvaise propriété dans ce cas.

L'option sudo -A fonctionnerait pour moi si elle conservait le délai par défaut.

Depuis le manuel sudo:

Option: ‑A

Normalement, si sudo requiert un mot de passe, il le lira depuis le terminal de l'utilisateur. Si l'option ‑A (askpass) est spécifiée, un programme d'aide (éventuellement graphique) est exécuté pour lire le mot de passe de l'utilisateur et sortir le mot de passe sur la sortie standard. Si la variable d'environnement SUDO_ASKPASS est définie, elle spécifie le chemin d'accès au programme d'assistance. Sinon, si /etc/sudo.conf contient une ligne spécifiant le programme askpass, cette valeur sera utilisée. Par exemple:

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

BTW, kdesudo a ce même problème - il nécessite le mot de passe à chaque fois qu'il est appelé, même si juste une seconde plus tard dans le même script.

J'utilise Kubuntu 12.04 64 bits.

Voici un exemple de travail complet de toutes les parties de la solution. Il se compose d'un script bash, d'un script "myaskpass" comme suggéré ici et d'un fichier ".desktop". Le tout devrait être 100% GUI (pas d'interaction du terminal du tout), donc le fichier .desktop est essentiel (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=

Et un script de test lui-même. Celui-ci vous demandera votre mot de passe deux fois lors de l'utilisation de cette solution.

#!/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

2
N'est-ce gksudopas une option ici? linux.die.net/man/1/gksudo
slm

Je suis sur KDE, donc gksudo n'est pas une option pour moi, mais on m'a dit que cela fonctionne de la même manière que kdesudo. kdesudosouffre du même problème que je décris ci-dessus. Je testais sudo -Acomme alternative à kdesudoet c'est mieux pour ma situation, mais cela ne résout pas le problème de délai d'attente (du moins jusqu'à présent).
MountainX

Réponses:


7

J'ajoute ceci à mon 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 &

Je l'ai trouvé ici:

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

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

J'utilise un autre script pour lancer mon script principal et j'utilise un fichier .desktop pour lancer ce script d'aide. Ce n'est pas très simple, mais il peut être fait pour fonctionner à 100% GUI. Je cherche toujours la solution parfaite, mais cela fait l'affaire pour l'instant.


1

Que diriez - vous gksudo ?

$ gksudo your_app_launcher.sh

Il montre une boîte de dialogue graphique pour entrer en toute sécurité le mot de passe administrateur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.