web-dev-qa-db-fra.com

Quelle est la différence entre gksudo et gksu?

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

58
Sid

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é de manière symbolique à gksuname__. 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. Il s'agit généralement de argv[0] dans les langages de style C ou de $0 dans les scripts Shell 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 cherchez dans apt-get source gksu dans le code 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 ceci par les arguments --su-mode/-w et --Sudo-mode/-S (afin que vous puissiez exécuter des commandes équivalentes sans avoir besoin du lien symbolique gksudo... Mais c'est à vous de décider.

Si vous voulez savoir en quoi ces "modes" diffèrent vraiment, gksuéchappe un peu. Vous devez le suivre dans libgksuname__. 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 libgksuname__, il vérifiera Gconf (comme Stefano le fait remarquer) et s'il ne peut toujours pas décider, il sera par défaut au mode suname__.

39
Oli

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

  • gksu devrait normalement se 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 équivaut à exécuter gksudo. En effet, sur Ubuntu, vous 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, juste un lien symbolique vers gksu)

De l'entrée gconf de gksu:

alt text

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

Vous ne devez jamais utiliser Sudo normal pour démarrer 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 ne deviennent la propriété de root. (AFAICT, c’est tout ce qui fait la particularité de l’environnement du processus démarré avec gksudo vs Sudo).
- (du documentation de la communauté via Chris Wilson )

37
Stefano Palazzo

Je sais que c’est un vieux sujet, mais j’ai demandé à vous le dire à propos 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 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 quand j'ai accidentellement supprimé des fichiers système précisément à cause de cette différence (discuté dans un fil dans les forums Ubunt ) - J'utilisais gksu, mais depuis lors, je me suis toujours assuré de utilisez 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.

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

Donc, veuillez utiliser gksudo au lieu de gksu.

14
Paddy Landau