57 votes

Quelle est la différence entre gksudo et gksu ?

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

39voto

Mufaka Points 54

Les deux fichiers pointent vers le 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é par un lien symbolique à gksu . Mais cela ne signifie pas qu'ils faire les mêmes choses, loin de là.

Les applications peuvent détecter la commande utilisée pour les exécuter. Il s'agit généralement argv[0] dans les langages de type C ou $0 dans les Shell Shell de style Bourne. L'application peut regarder cela et dans ce cas, effectivement, cela change la façon dont elle fonctionne. La première indication de ceci est dans le man gksu page :

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

Si vous regardez dans la source ( apt-get source gksu ) pour run_mode vous verrez comment il le détecte :

  { /* 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 cette option par l'option --su-mode / -w y --sudo-mode / -S (afin que vous puissiez exécuter des commandes équivalentes sans avoir besoin de l'option gksudo lien symbolique... Mais c'est à vous de voir.

Si vous voulez savoir comment ces "modes" diffèrent réellement, il suffit d'un peu d'échappement dans gksu . Vous devez le suivre dans libgksu . Il s'agit de la bibliothèque qui vérifie réellement les autorisations avant de les transmettre 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érifiera Gconf (comme Stefano le signale) et s'il n'arrive toujours pas à se décider, il utilisera par défaut l'option su mode.

37voto

andybee Points 497

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

  • gksu serait normalement Connectez-vous à l'utilisateur root et lancer une application sur cette session. Cependant, sur Ubuntu, il utilise par défaut le "mode sudo", ce qui équivaut à exécuter gksudo . C'est parce que sur ubuntu, vous Impossible de se connecter en tant que root par défaut.

  • gksudo est l'équivalent graphique de sudo (et comme Oli le fait remarquer, juste un lien symbolique vers gksu)

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

alt text

En outre, sur la différence entre sudo et gksudo :

Vous ne devez jamais utiliser le sudo normal pour lancer des applications graphiques en tant que root. Vous devez 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 empêche les fichiers de votre répertoire personnel d'être la propriété de root. (AFAICT, c'est tout ce qui est spécial à propos de l'environnement du processus démarré avec gksudo vs. sudo).
- (de la documentation communautaire via Chris Wilson )

14voto

Paddy Landau Points 4076

Je sais que c'est un vieux fil de discussion, mais j'ai été demandé de vous dire sur une différence subtile mais essentielle entre gksu y gksudo .

Bien que j'aie cherché longuement, je ne trouve nulle part de différence documentée, et pourtant elle existe. Je n'ai pas non plus trouvé pourquoi il y a une différence. Je l'ai appris à mes dépens lorsque j'ai accidentellement supprimé certains fichiers système précisément à cause de cette différence (discutée dans un article de la série fil de discussion dans les Forums Ubuntu ) - J'avais utilisé 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 premières donnent le même résultat (attendu), c'est-à-dire juste abc.tmp ) alors que le sixième comprend 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 -print con -delete dans le find (ce qui est exactement ce qui m'est arrivé, entraînant la suppression de certains fichiers système).

Donc, veuillez utiliser gksudo au lieu de gksu .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X