Die sudo -A
Option (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
gksudo
keine Option? linux.die.net/man/1/gksudokdesudo
leidet das gleiche Problem, das ich oben beschreibe. Ich habesudo -A
als Alternative zu getestetkdesudo
und es ist besser für meine Situation, aber es löst das Timeout-Problem nicht (zumindest bisher).Antworten:
Ich füge dies meinem Bash-Skript hinzu:
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.
quelle
Wie wäre es mit Gksudo ?
Es wird ein grafischer Dialog zur sicheren Eingabe des Administratorkennworts angezeigt.
quelle