it-swarm.com.de

Was ist der Unterschied zwischen gksudo und gksu?

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

58
Sid

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

... gksudo ist mit gksu verknüpft. 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 Sprachen im C-Stil oder $0 in Shell-Skripten im Bourne-Stil. Die Anwendung kann das betrachten und in diesem Fall ändert sie tatsächlich, wie es funktioniert. Der erste Hinweis darauf befindet sich auf der Seite man gksu:

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

Wenn Sie in der Quelle (apt-get source gksu) nach run_mode suchen, werden Sie feststellen, 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/-w und --Sudo-mode/-S überschreiben (sodass Sie entsprechende Befehle ausführen können, ohne den Symlink gksudo zu benötigen ... Aber das liegt bei Ihnen .

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

Wenn zum Zeitpunkt des Erreichens von gksu kein Modus angegeben ist (z. B. Sie rufen libgksu ohne Argumente auf), es wird Gconf überprüft (wie Stefano darauf hinweist) und wenn es sich immer noch nicht entscheiden kann, wird es standardmäßig verwendet in den Modus su.

39
Oli

In Ubuntu (!) Gibt es keinen Unterschied.

  • gksu wü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 von gksudo entspricht. Dies liegt daran, dass Sie unter Ubuntu standardmäßig Sie können sich nicht als root anmelden .

  • gksudo ist das grafische Äquivalent zu 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 von root gehört werden. (AFAICT, das ist das Besondere an der Umgebung des gestarteten Prozesses mit gksudo vs. Sudo).
- (aus der Community-Dokumentation über Chris Wilson )

37
Stefano Palazzo

Ich weiß, dass dies ein alter Thread ist, aber ich habe gebeten, es Ihnen zu sagen über einen subtilen, aber wesentlichen Unterschied zwischen gksu und gksudo gesprochen.

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 (besprochen in einem Thread in Ubuntu-Foren ) - Ich hatte gksu verwendet, aber seitdem habe ich Achten Sie darauf, immer gksudo zu verwenden.

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 liefern das gleiche (erwartete) Ergebnis (d. H. Nur abc.tmp), wohingegen 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 vor, wenn Sie -print durch -delete im Befehl find ersetzen (genau das ist mir passiert, wodurch einige Systemdateien gelöscht wurden).

Verwenden Sie also bitte gksudo anstelle von gksu.

14
Paddy Landau