Quelle est la différence entre gksudo et gksu?

58

Y at-il une différence entre le comportement de gksu fooet gksudo foo?
Peuvent-ils être utilisés de manière interchangeable?

Sid
la source

Réponses:

39

Les deux fichiers pointent au même endroit:

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

... gksudoest lié à gksu. Mais cela ne signifie pas qu'ils font les mêmes choses, loin de là.

Les applications peuvent détecter la commande utilisée pour l'exécuter. Cela se fait généralement argv[0]dans les langages de style C ou $0dans les scripts shell Bourne. L'application peut regarder cela et dans ce cas, en fait, cela change son fonctionnement. La première indication de ceci est dans la man gksupage:

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

Si vous cherchez dans le source ( apt-get source gksu) run_mode, vous verrez comment il détecte ceci:

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

Vous pouvez remplacer ceci avec les arguments --su-mode/ -wet --sudo-mode/ -S(vous pouvez donc exécuter des commandes équivalentes sans avoir besoin du gksudolien symbolique ... Mais c'est à vous de décider.

Si vous voulez savoir en quoi ces "modes" diffèrent vraiment, il n'y a que peu d'échappées gksu. Vous devez suivre cela libgksu. C’est la bibliothèque qui vérifie les autorisations avant de passer au système.

Si aucun mode n'est spécifié (par exemple, vous appelez gksusans arguments) au moment où il atteint libgksu, il vérifiera Gconf (comme le fait remarquer Stefano) et s'il ne peut toujours pas décider, il passera par défaut au sumode.

Oli
la source
1
Pour ajouter au commentaire de Oli; Bien que gksudo soit lié symboliquement à gksu, sous Ubuntu, par défaut, nous n'utilisons que gksudo car le mode / apps / gksu / sudo est activé. Donc, à moins que quelqu'un force le choix de l'option --su-mode, gksu n'est pas utilisé.
Vish le
5
@ Oli: Je ne conclurais pas immédiatement qu'il n'y a pas de différence simplement parce que c'est un lien symbolique. Regardez dans busybox, en fonction du nom du lien symbolique, différentes actions sont effectuées. Dans ce cas, je ne sais pas si c'est vrai ou pas, mais autant que je sache, c'est bien le cas.
Lekensteyn
1
-1, très trompeur: le logiciel peut se comporter différemment en fonction du nom utilisé pour les invoquer. Par exemple, bashactive le mode strict POSIX lorsqu’il est appelé sh. Et gksu est également conscient du nom de l'invocation.
MestreLion
En utilisant Internet sur mon téléphone portable avec un écran trop petit et des doigts trop gros, je dois avoir involontairement voté. J'ai voté pour compenser :)
Jacob Vlijm
37

Dans Ubuntu (!), Il n'y a pas de différence.

  • gksunormalement connecter l'utilisateur root et exécuter une application sur cette session. Cependant, sous Ubuntu, le mode "sudo" est utilisé par défaut, ce qui revient à exécuter gksudo. En effet, sur Ubuntu, vous ne pouvez pas vous connecter en tant que root par défaut.

  • gksudoest l'équivalent graphique de sudo(et, comme le souligne Oli, juste un lien symbolique vers gksu)

De l'entrée gconf de gksu:

texte alternatif

De plus, sur la différence entre sudo et gksudo:

Vous ne devriez jamais utiliser sudo normal pour lancer des applications graphiques en tant que root. Vous devriez utiliser gksudo (kdesudo sur Kubuntu) pour exécuter de tels programmes. gksudo définit HOME = ~ root et copie .Xauthority dans un répertoire tmp. Cela évite que les fichiers de votre répertoire personnel deviennent la propriété de root. (AFAICT, c’est tout ce qui fait la spécificité de l’environnement du processus démarré avec gksudo vs sudo).
 - (à partir de la documentation de la communauté via Chris Wilson )

Stefano Palazzo
la source
14

Je sais que c'est un vieux fil, mais on m'a demandé de vous parler d'une différence subtile mais essentielle entre gksuet gksudo.

Bien que je me sois longuement penché sur la question, je ne trouve nulle part une différence documentée et pourtant, elle existe. Je n'ai pas non plus découvert pourquoi il y a une différence. J'ai trouvé cela à la dure lorsque j'ai accidentellement supprimé certains fichiers système précisément à cause de cette différence (discuté dans un fil de discussion des forums Ubuntu ) - J'utilisais gksu, mais depuis lors, je me suis assuré de toujours utiliser gksudo.

Pour résumer, essayez ceci.

  1. Créez trois fichiers dans un dossier:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Exécutez les six commandes suivantes. Les cinq premiers donnent le même résultat (attendu) (c'est-à-dire juste abc.tmp), tandis que le sixième inclut un fichier supplémentaire ( abctmp) qu'il ne devrait pas.

    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
    

Imaginez les problèmes lorsque vous remplacez -printpar -deletedans la findcommande (ce qui est exactement ce qui m'est arrivé, ce qui a entraîné la suppression de certains fichiers système).

Donc, s'il vous plaît utiliser gksudoau lieu de gksu.

Paddy Landau
la source
Je viens d'essayer ceci sur 12.04LTS. Je ne comprends pas encore pourquoi mais il y a une différence. Le code source de gksu montre que cela gksudoéquivaut à tapergksu --sudo-mode
Warren Hill
@ WarrenHill - oui, en théorie! Mais pas dans la pratique. Je ne sais pas pourquoi.
Paddy Landau
2
Intéressant, et vérifié le 13.04. Ressemble vraiment à un bogue de gestion de devis.
l0b0
4
A déposé un bug .
l0b0
1
@ l0b0 - merci, j'ai ajouté mon vote au bogue.
Paddy Landau