Quelle est la différence entre gksudo et gksu?

58

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

    
posée Sid 11.01.2011 - 12:52
la source

3 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

... gksudo est lié symboliquement à gksu . Mais cela ne signifie pas qu'ils fassent les mêmes choses, loin de là.

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

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

Si vous recherchez apt-get source gksu dans la source ( 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 cela par les arguments --su-mode / -w et --sudo-mode / -S (vous pouvez donc exécuter des commandes équivalentes sans avoir besoin du lien symbolique gksudo ... Mais c'est à vous de voir.

Si vous voulez savoir en quoi ces "modes" diffèrent vraiment, échappez-vous un peu à gksu . Vous devez le suivre dans 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 gksu sans arguments) au moment où il atteint libgksu , il vérifie Gconf (comme le souligne Stefano) et s’il ne peut toujours pas décider, le mode su sera sélectionné par défaut.

    
réponse donnée Oli 11.01.2011 - 13:22
la source
37

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

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

  • gksudo est l'équivalent graphique de sudo (et comme le souligne Oli, il ne s'agit que d'un lien symbolique vers gksu)

À partir de l'entrée gconf de gksu:

Enoutre,surladifférenceentresudoetgksudo:

Youshouldneverusenormalsudotostartgraphicalapplicationsasroot.Youshouldusegksudo(kdesudoonKubuntu)torunsuchprograms.gksudosetsHOME=~root,andcopies.Xauthoritytoatmpdirectory.Thispreventsfilesinyourhomedirectorybecomingownedbyroot.(AFAICT,thisisallthat'sspecialabouttheenvironmentofthestartedprocesswithgksudovs.sudo).
 —(fromthecommunity documentation via Chris Wilson)

    
réponse donnée Stefano Palazzo 11.01.2011 - 13:18
la source
14

Je sais que c'est un ancien fil de discussion, mais j'ai été a été invité à vous informer d'une différence subtile mais essentielle entre gksu et gksudo .

Bien que je me sois longuement penché sur la question, je ne trouve nulle part une différence documentée, qui existe pourtant. 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 que abc.tmp ), tandis que le sixième inclut un fichier supplémentaire ( abctmp ) qu'il ne devrait pas obtenir.

    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 -print par -delete dans la commande find (c'est exactement ce qui m'est arrivé, ce qui a entraîné la suppression de certains fichiers système).

Alors, veuillez utiliser gksudo au lieu de gksu .

    
réponse donnée Paddy Landau 30.04.2013 - 15:42
la source

Lire d'autres questions sur les étiquettes