Was ist der Unterschied zwischen gksudo und gksu?


58

Gibt es einen Unterschied zwischen dem Verhalten von gksu foound gksudo foo?
Können sie austauschbar verwendet werden?

Antworten:


39

Beide Dateien verweisen auf denselben Ort:

$ ls -l /usr/bin/gksudo 
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu

... gksudoist verbunden mit gksu. Aber das bedeutet nicht, dass sie die gleichen Dinge tun , weit davon entfernt.

Anwendungen können den zum Ausführen verwendeten Befehl erkennen. Dies ist normalerweise argv[0]in C-Sprachen oder $0in Bourne-Shell-Skripten der Fall. Die Anwendung kann das betrachten und in diesem Fall ändert sie tatsächlich, wie es funktioniert. Der erste Hinweis darauf ist auf der man gksuSeite:

gksu  is  a  frontend  to  su  and gksudo is a frontend to sudo.

Wenn Sie in der Quelle ( apt-get source gksu) nach suchen run_mode, werden Sie sehen, wie dies erkannt wird:

  { /* support gksu_sudo_run */
    gchar *myname = g_path_get_basename (argv[0]);
    if (!strcmp(myname, "gksudo"))
      run_mode = SUDO_MODE;
    g_free (myname);
  }

Sie können dies mit den Argumenten --su-mode/ -wund --sudo-mode/ überschreiben -S(so dass Sie gleichwertige Befehle ausführen können, ohne den gksudoSymlink zu benötigen ... Aber das liegt bei Ihnen.

Wenn Sie wissen möchten, wie sich diese "Modi" wirklich unterscheiden, müssen Sie nur ein bisschen ausweichen gksu. Sie müssen es in folgen libgksu. Dies ist die Bibliothek, die tatsächlich die Berechtigungen überprüft, bevor sie an das System übergeben wird.

Wenn gksuzum Zeitpunkt des Erreichens kein Modus angegeben ist (z. B. Sie rufen ohne Argumente auf) libgksu, überprüft es Gconf (wie Stefano betont), und wenn es sich immer noch nicht entscheiden kann, wird standardmäßig der suModus verwendet.


1
Zu Olis Kommentar hinzufügen; Obwohl gksudo mit gksu verbunden ist, verwenden wir in Ubuntu standardmäßig nur gksudo, da der / apps / gksu / sudo-Modus aktiviert ist. Sofern nicht jemand die Option --su-mode erzwingt, wird gksu nicht verwendet.
Vish

5
@Oli: Ich würde nicht sofort den Schluss ziehen, dass es keinen Unterschied gibt, nur weil es ein Symlink ist. Schau bei busybox, je nach Name des Symlinks werden unterschiedliche Aktionen durchgeführt. In diesem Fall weiß ich nicht, ob es wahr ist oder nicht, aber AFAIK ist es tatsächlich der Fall.
Lekensteyn

1
-1, sehr irreführend: Software verhält sich möglicherweise anders, je nachdem, mit welchem ​​Namen sie aufgerufen wurden. Aktiviert beispielsweise den bashstrengen POSIX-Modus, wenn er als aufgerufen wird sh. Und gksu ist auch bewusst Aufruf Namen.
MestreLion

Wenn ich das Internet auf meinem Handy mit zu kleinem Bildschirm und zu großen Fingern nutze, muss ich ungewollt einen Downvot durchgeführt haben. Ich habe mich entschädigt :)
Jacob Vlijm

37

In Ubuntu (!) Gibt es keinen Unterschied.

  • gksuwürde sich normalerweise beim root-Benutzer anmelden und in dieser Sitzung eine App ausführen. Unter Ubuntu wird jedoch standardmäßig der "Sudo-Modus" verwendet, der dem Ausführen entspricht gksudo. Dies liegt daran, dass Sie sich unter Ubuntu nicht standardmäßig als root anmelden können .

  • gksudoist das grafische Äquivalent von sudo(und wie Oli betont, nur ein symbolischer Link zu gksu)

Aus dem gconf-Eintrag von gksu:

Alt-Text

Über den Unterschied zwischen sudo und gksudo:

Sie sollten niemals normales sudo verwenden, um grafische Anwendungen als root zu starten. Sie sollten gksudo (kdesudo auf Kubuntu) verwenden, um solche Programme auszuführen. gksudo setzt HOME = ~ root und kopiert .Xauthority in ein tmp-Verzeichnis. Dies verhindert, dass Dateien in Ihrem Home-Verzeichnis dem Root gehören. (AFAICT, das ist das Besondere an der Umgebung des gestarteten Prozesses mit gksudo vs. sudo).
 - (aus der Community-Dokumentation über Chris Wilson )


14

Ich weiß, dass dies ein alter Thread ist, aber ich wurde gebeten, Ihnen von einem subtilen, aber wesentlichen Unterschied zwischen gksuund zu erzählengksudo .

Obwohl ich lange und intensiv gesucht habe, kann ich nirgendwo einen dokumentierten Unterschied finden, und dennoch existiert er. Ich habe auch nicht herausgefunden, warum es einen Unterschied gibt. Ich fand das schwierig, als ich versehentlich einige Systemdateien gerade wegen dieses Unterschieds löschte (in einem Thread in den Ubuntu-Foren besprochen ) - ich hatte es verwendet gksu, aber seitdem habe ich immer darauf geachtet, es zu verwenden gksudo.

Versuchen Sie dies zusammenfassend.

  1. Erstellen Sie drei Dateien in einem Ordner:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Führen Sie die folgenden sechs Befehle aus. Die ersten fünf geben das gleiche (erwartete) Ergebnis (dh nur abc.tmp), während die sechste eine zusätzliche Datei ( abctmp) enthält, die es nicht sollte.

    find . -regextype posix-egrep -regex '.*\.tmp' -print
    sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu --sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    

Stellen Sie sich die Probleme auf, wenn Sie ersetzen -printmit -deleteim findKommando (das ist genau das , was mir passiert ist , so dass einige Systemdateien gelöscht werden).

Also bitte gksudostatt verwenden gksu.


Habe das gerade am 12.04LTS ausprobiert. Verstehe noch nicht ganz warum, aber es gibt einen Unterschied. Der Quellcode für gksu zeigt, dass gksudodies der Eingabe entsprichtgksu --sudo-mode
Warren Hill

@WarrenHill - ja, theoretisch! In der Praxis nicht. Keine Ahnung warum.
Paddy Landau

2
Interessant und überprüft am 13.04. Sieht auf jeden Fall aus wie ein Fehler bei der Angebotsbearbeitung.
l0b0

4
Habe einen Bug abgelegt .
l0b0

1
@ l0b0 - danke, ich habe meine Stimme zum Bug hinzugefügt.
Paddy Landau
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.