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 ?
Réponses
Trop de publicités?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.
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écutergksudo
. C'est parce que sur ubuntu, vous Impossible de se connecter en tant que root par défaut. -
gksudo
est l'équivalent graphique desudo
(et comme Oli le fait remarquer, juste un lien symbolique vers gksu)
À partir de l'entrée gconf de gksu :
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 )
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.
- Créez trois fichiers dans un dossier :
touch abc
touch abc.tmp
touch abctmp
-
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
.