Existe-t-il une différence entre le comportement de gksu foo
et gksudo foo
?
Peuvent-ils être utilisés de manière interchangeable?
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é de manière symbolique à gksu
name__. 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 libgksu
name__. 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
name__, 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 su
name__.
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:
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 )
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.
touch abc
touch abc.tmp
touch abctmp
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
.