Fragen Sie grafisch in einem Bash-Skript nach dem Passwort und behalten Sie die Standardeinstellung für das Sudo-Timeout bei

9

Die sudo -AOption (SUDO_ASKPASS) führt anscheinend dazu, dass sudo die Einstellung für das Zeitlimit (z. B. timestamp_timeout) verliert.

Ich möchte die Option sudo -A verwenden, aber ich möchte das Standardzeitlimit (z. B. 15 Minuten unter Ubuntu) in einem Bash-Skript beibehalten. Ich möchte sicher und in einem GUI-Dialogfeld nach dem Kennwort des Benutzers fragen, aber ich möchte nur einmal nach meinem Skript fragen (nicht mehr als 50 Mal).

Außerdem möchte ich nicht mein gesamtes Skript als Root-Benutzer ausführen, da ich das für eine schlechte Idee halte. Außerdem haben von meinem Skript erstellte Dateien in diesem Fall den falschen Besitz.

Die Option sudo -A würde für mich funktionieren, wenn das Standardzeitlimit beibehalten würde.

Aus dem Sudo-Handbuch:

Option: ‑A

Wenn sudo ein Passwort benötigt, liest es es normalerweise vom Terminal des Benutzers. Wenn die Option ‑A (askpass) angegeben ist, wird ein (möglicherweise grafisches) Hilfsprogramm ausgeführt, um das Kennwort des Benutzers zu lesen und das Kennwort an die Standardausgabe auszugeben. Wenn die Umgebungsvariable SUDO_ASKPASS festgelegt ist, gibt sie den Pfad zum Hilfsprogramm an. Andernfalls wird dieser Wert verwendet, wenn /etc/sudo.conf eine Zeile enthält, die das askpass-Programm angibt. Zum Beispiel:

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

Übrigens hat kdesudo das gleiche Problem - es erfordert das Passwort jedes Mal, wenn es aufgerufen wird, auch wenn es nur eine Sekunde später im selben Skript ist.

Ich benutze Kubuntu 12.04 64 Bit.

Hier finden Sie ein vollständiges Beispiel für alle Teile der Lösung. Es besteht aus einem Bash - Skript, ein „myaskpass“ Skript wie vorgeschlagen hier , und ein „.desktop“ -Datei. Das Ganze sollte 100% GUI sein (überhaupt keine Terminal-Interaktion), daher ist die .desktop-Datei unerlässlich (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=

Und ein Testskript selbst. Dieser wird bei Verwendung dieser Lösung zweimal nach Ihrem Passwort fragen.

#!/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
quelle
2
Ist hier gksudokeine Option? linux.die.net/man/1/gksudo
slm
Ich bin auf KDE, daher ist Gksudo für mich keine Option, aber mir wurde gesagt, dass es genauso funktioniert wie Kdesudo. kdesudoleidet das gleiche Problem, das ich oben beschreibe. Ich habe sudo -Aals Alternative zu getestet kdesudound es ist besser für meine Situation, aber es löst das Timeout-Problem nicht (zumindest bisher).
MountainX

Antworten:

7

Ich füge dies meinem Bash-Skript hinzu:

# 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 &

Fand es hier:

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

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

Ich verwende ein anderes Skript, um mein Hauptskript zu starten, und ich verwende eine .desktop-Datei, um dieses Hilfsskript zu starten. Es ist nicht sehr einfach, aber es kann dazu gebracht werden, 100% GUI zu funktionieren. Ich bin immer noch auf der Suche nach der perfekten Lösung, aber das macht vorerst den Trick.

MountainX
quelle
1

Wie wäre es mit Gksudo ?

$ gksudo your_app_launcher.sh

Es wird ein grafischer Dialog zur sicheren Eingabe des Administratorkennworts angezeigt.

woohoo
quelle