Ich habe ein Bash-Skript erstellt, das kdialog ausschließlich für die Interaktion mit dem Benutzer verwendet. Es wird aus einer ".desktop" -Datei gestartet, sodass der Benutzer das Terminal nie sieht. Es sieht zu 100% aus wie eine GUI-App (obwohl es sich nur um ein Bash-Skript handelt). Es läuft nur in KDE (Kubuntu 12.04).
Mein einziges Problem ist die sichere und bequeme Eingabe von Passwörtern . Ich kann keine zufriedenstellende Lösung finden.
Das Skript wurde entwickelt , um als normaler Benutzer ausgeführt zu werden und um das Kennwort einzugeben, wenn ein sudo-Befehl zum ersten Mal benötigt wird. Auf diese Weise werden die meisten Befehle, für die keine Sudo-Rechte erforderlich sind, als normaler Benutzer ausgeführt. Was passiert (wenn das Skript vom Terminal ausgeführt wird), ist, dass der Benutzer einmal zur Eingabe seines Kennworts aufgefordert wird und das Standard-Sudo-Timeout das Beenden des Skripts einschließlich aller zusätzlichen Sudo-Befehle ermöglicht, ohne den Benutzer erneut dazu aufzufordern. So soll es auch funktionieren, wenn es hinter der GUI ausgeführt wird.
Das Hauptproblem besteht darin, dass kdesudo
das Starten meines Skripts, das die Standard-GUI-Methode ist, bedeutet, dass das gesamte Skript vom Root-Benutzer ausgeführt wird. Daher werden dem Root-Benutzer Dateieigentümer zugewiesen, auf die ich mich ~/
in Pfaden nicht verlassen kann , und viele andere Dinge sind nicht ideal. Das Ausführen des gesamten Skripts als Root-Benutzer ist nur eine sehr unbefriedigende Lösung, und ich denke, es ist eine schlechte Praxis.
Ich freue mich über Ideen, wie ein Benutzer das sudo-Passwort nur einmal über die GUI eingeben kann, ohne das gesamte Skript als root auszuführen. Vielen Dank.
sudo -s
(Kleinbuchstabens
) und nichtsudo -S
(Großbuchstabens
) sein.Dies basiert auf Eric Carvalhos ausgezeichneter Antwort. Ich poste es, um auf das Problem einzugehen, auf das ich gestoßen bin. Insbesondere bei dieser Verwendung geht das übliche Sudo-Timeout (z. B. 15 Minuten) verloren. Mein Skript mit über 50 sudo-Befehlen fordert jetzt mehr als 50 Mal zur Eingabe des Benutzerpassworts auf!
Hier finden Sie ein vollständiges Beispiel für alle Teile der Lösung. Es besteht aus einem Bash-Skript, einem "myaskpass" -Skript, wie Eric vorgeschlagen hat, und einer ".desktop" -Datei. Das Ganze sollte 100% GUI sein (überhaupt keine Terminal-Interaktion), daher ist die .desktop-Datei unerlässlich (afaik).
Und ein Testskript selbst. Dieser wird bei Verwendung dieser Lösung zweimal nach Ihrem Passwort fragen. (Normalerweise wird aufgrund des Standard-Sudo-Timeouts nur einmal gefragt.)
quelle
sudo -A
Wenn Sie über die GUI (Klicken auf .desktop oder .sh im Dateimanager) ausgeführt werden, wird das Kennwort erneut überprüft. Ich werde versuchen, das herauszufinden.Das folgende Skript funktioniert über Befehlszeile, Desktop-Datei oder Doppelklick, fragt nur einmal nach dem Kennwort und das Befehlsmuster
sudo -Sp '' <your command here> <<<${sudo_password}
kann überall in der Datei mehrmals verwendet werden:quelle