¿Cuál es la diferencia entre gksudo y gksu?

58

¿Hay alguna diferencia entre el comportamiento de gksu fooy gksudo foo?
¿Se pueden usar indistintamente?

Sid
fuente

Respuestas:

39

Ambos archivos apuntan al mismo lugar:

$ ls -l /usr/bin/gksudo 
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu

... gksudoestá vinculado a gksu. Pero esto no significa que hagan lo mismo, ni mucho menos.

Las aplicaciones pueden detectar el comando utilizado para ejecutarlo. Esto es típicamente argv[0]en lenguajes de estilo C o $0en scripts de shell de estilo Bourne. La aplicación puede ver eso y, en este caso, en realidad cambia su funcionamiento. La primera indicación de esto está en la man gksupágina:

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

Si busca en la fuente ( apt-get source gksu) run_mode, verá cómo detecta esto:

  { /* support gksu_sudo_run */
    gchar *myname = g_path_get_basename (argv[0]);
    if (!strcmp(myname, "gksudo"))
      run_mode = SUDO_MODE;
    g_free (myname);
  }

Puede anular esto con los argumentos --su-mode/ -wy --sudo-mode/ -S(para que pueda ejecutar comandos equivalentes sin necesidad del gksudoenlace simbólico ... Pero eso depende de usted.

Si quieres saber cómo estos "modos" realmente difieren, solo hay un poco de escape gksu. Tienes que seguirlo libgksu. Esta es la biblioteca que realmente verifica los permisos antes de entregarlos al sistema.

Si no se especifica ningún modo (por ejemplo, llama gksusin argumentos) para cuando llegue libgksu, verificará Gconf (como señala Stefano) y si aún no puede decidir, pasará al sumodo predeterminado .

Oli
fuente
1
Para agregar al comentario de Oli; Aunque gksudo está vinculado a gksu, en Ubuntu, por defecto solo usaremos gksudo porque tenemos habilitado el / apps / gksu / sudo-mode. Entonces, a menos que alguien fuerce la opción --su-mode, gksu no se usa.
Visite
55
@Oli: No concluiría inmediatamente que no hay diferencia solo porque es un enlace simbólico. Mire busybox, dependiendo del nombre del enlace simbólico, se realizan diferentes acciones. En este caso, no sé si es cierto o no, pero AFAIK es el caso.
Lekensteyn
1
-1, muy engañoso: el software puede comportarse de manera diferente dependiendo del nombre utilizado para invocarlos. Por ejemplo, bashactiva el modo estricto POSIX cuando se invoca como sh. Y gksu es también consciente de nombre de invocación.
MestreLion
Al usar Internet en mi teléfono celular con una pantalla demasiado pequeña y dedos demasiado grandes, debo haber votado en contra involuntariamente. Voté para compensar :)
Jacob Vlijm
37

En Ubuntu (!), No hay diferencia.

  • gksunormalmente iniciaría sesión en el usuario root y ejecutaría una aplicación en esta sesión. Sin embargo, en Ubuntu, por defecto usa el "modo sudo", que es equivalente a la ejecución gksudo. Esto se debe a que en ubuntu no puede iniciar sesión como root de forma predeterminada.

  • gksudoes el equivalente gráfico de sudo(y como señala Oli, solo un enlace simbólico a gksu)

De la entrada gconf de gksu:

texto alternativo

Además, sobre la diferencia entre sudo y gksudo:

Nunca debe usar sudo normal para iniciar aplicaciones gráficas como root. Debe usar gksudo (kdesudo en Kubuntu) para ejecutar dichos programas. gksudo establece HOME = ~ root y copia .Xauthority en un directorio tmp. Esto evita que los archivos en su directorio de inicio sean propiedad de root. (AFAICT, esto es todo lo que es especial sobre el entorno del proceso iniciado con gksudo vs. sudo).
 - (de la documentación de la comunidad a través de Chris Wilson )

Stefano Palazzo
fuente
14

Sé que este es un hilo viejo, pero me han pedido que les cuente sobre una diferencia sutil pero esencial entre gksuy gksudo.

Aunque he buscado mucho, no puedo encontrar una diferencia documentada en ningún lado, y sin embargo, existe. Tampoco he descubierto por qué hay una diferencia. Encontré esto de la manera difícil cuando eliminé accidentalmente algunos archivos del sistema precisamente debido a esta diferencia (discutido en un hilo en los foros de Ubuntu ): había estado usando gksu, pero desde entonces me he asegurado de usar siempre gksudo.

Para resumir, intente esto.

  1. Crea tres archivos en alguna carpeta:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Ejecute los siguientes seis comandos. Los primeros cinco dan el mismo resultado (esperado) (es decir, solo abc.tmp), mientras que el sexto incluye un archivo adicional ( abctmp) que no debería.

    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
    

Imagine los problemas cuando reemplaza -printcon -deleteen el findcomando (que es exactamente lo que me sucedió, causando que se eliminen algunos archivos del sistema).

Entonces, por favor use en gksudolugar de gksu.

Paddy Landau
fuente
Acabo de probar esto en 12.04LTS. Todavía no entiendo completamente por qué, pero hay una diferencia. El código fuente de gksu muestra que gksudoes equivalente a escribirgksu --sudo-mode
Warren Hill
@WarrenHill: ¡sí, en teoría! Pero no en la práctica. No se por que.
Paddy Landau
2
Interesante y verificado el 13.04. Definitivamente parece un error de manejo de cotizaciones.
l0b0
44
Archivado un error .
l0b0
1
@ l0b0 - gracias, agregué mi voto al error.
Paddy Landau