Skript zur Verwendung von Sudo in einem Terminal, sonst Gksudo?

1960
Ryan Thompson

Ich möchte ein Skript schreiben, das eine Administrationsaufgabe erledigt, und ich möchte es entweder von einem Terminal aus ausführen können oder nicht. Wenn es in einem Terminal läuft, auch in einem grafischen, würde ich es gerne mit sudo nach dem Passwort fragen. Wenn es auf eine andere Weise ausgeführt wird (zum Beispiel Alt + F2-Dialog), sollte es gksudo verwenden. Irgendwelche Lösungen?


Antworten

Basierend auf dem Folgenden habe ich Folgendes entwickelt:

#!/bin/sh  SUDO="/usr/bin/sudo"  if [ -t 1 ]; then "$SUDO" "$@"; else gksudo -- "$SUDO" "$@"; fi 

Der etwas umständliche Fall für gksudo besteht darin, sicherzustellen, dass die Optionen von sudo und nicht von gksudo analysiert werden, da sie unterschiedliche Befehlszeilenoptionen haben.

0

3 Antworten auf die Frage

1
Jonathan

Ich glaube, die üblichere Methode ist einfach zu sagen, dass das Skript Sudo ausführen muss, wie in:

sudo ./script_name.sh 

Auf diese Weise wird das gesamte Skript mit Administratorrechten ausgeführt. Wenn Sie vom Standpunkt des Sicherheitsmodells aus darüber nachdenken, gibt es keinen Grund, warum ein Skript, das sudo zumindest für einen Teil des Dokuments benötigt, nicht einfach mit sudo ausgeführt werden sollte. Ansonsten ist es nur ein Ärgernis.

Wenn Sie jedoch darauf bestehen, sudo nur für bestimmte Teile zu verwenden, können Sie sudo in Ihr aktuelles Bash-Skript einfügen. Es wird zur Eingabe des Kennworts aufgefordert und auf den Eintrag gewartet, bis das Skript weiterhin ausgeführt wird. Nachdem Sie mindestens einen Sudo-Kennworteintrag erhalten haben, behalten alle nachfolgenden Sudos die erhöhten Berechtigungen bei und fordern Sie nicht erneut zur Eingabe des Kennworts auf. Es bleibt Ihnen auch die gesamte Terminalsitzung mit erhöhten Berechtigungen für zukünftige Sudo vorbehalten, die nicht im Skript ausgeführt werden.

Für gksudo denke ich, dass es eine Option ist, der Person mitzuteilen, dass sie den alt-f2-Ausführungsdialog verwenden soll. Statt sudo script_name.sh einzugeben, geben Sie gksudo ein und klicken Sie auf die Schaltfläche "Mit Datei ausführen" die Skriptdatei, die sie ausführen müssen. Ich weiß, dass es schwerfällig ist. Hoffentlich hat jemand eine elegantere Lösung.

Ich stimme der Aussage zur Sicherheit nicht zu. Der Autor mag sicher sein, einen einfachen Teil mit sudo zu verpacken, aber wenn er das gesamte Skript mit sudo ausführt, muss das gesamte Skript bei jeder Bearbeitung geprüft und als sicherheitsfrei befunden werden. Es ist sicherer, Sudo nur für die minimale Teilmenge von Befehlen zu haben. Rich Homolka vor 13 Jahren 2
1
Doug Harris

Untersuchen Sie die Ausgabe, envwenn Sie vom Terminal aus starten und vom GUI gestartet werden. Ich vermute, dass Gnome (oder welcher Fenstermanager, den Sie verwenden) eine oder zwei Umgebungsvariablen hinzufügt.

Eine andere Möglichkeit besteht darin, zu prüfen, ob ein tty mit dieser verbunden ist, if [ -t 1 ]wie in dieser Antwort gezeigt (beachten Sie die Einschränkungen in den Kommentaren).

"[-t 1]" scheint zu funktionieren. Ryan Thompson vor 13 Jahren 0
Nur ein Hinweis, dass Sie möglicherweise die Ausgabe umleiten, Tee oder ähnliches verwenden, und "[-t 1]" würde "true" zurückgeben, was Sie nicht möchten. `[-t 0]` scheint angemessener zu sein, da stdin überprüft wird. domen vor 11 Jahren 0
0
grawity
if [ "$DISPLAY" ]; then gksudo foo else sudo foo fi 

Nahe genug.