Qual é a diferença entre gksudo e gksu?

58

Existe alguma diferença entre o comportamento de gksu foo e gksudo foo ?
Eles podem ser usados de forma intercambiável?

    
por Sid 11.01.2011 / 12:52

3 respostas

39

Os dois arquivos apontam para o mesmo lugar:

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

... gksudo é um link simbólico para gksu . Mas isso não significa que eles façam as mesmas coisas, longe disso.

Os aplicativos podem detectar o comando usado para executá-lo. Isso é normalmente argv[0] em linguagens de estilo C ou $0 em scripts de shell estilo Bourne. O aplicativo pode ver isso e, nesse caso, ele realmente muda a maneira como funciona. A primeira indicação disso está na página man gksu :

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

Se você procurar na fonte ( apt-get source gksu ) por run_mode , verá como ela detecta isso:

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

Você pode substituir isso com os argumentos --su-mode / -w e --sudo-mode / -S (para poder executar comandos equivalentes sem precisar do link simbólico gksudo ... Mas isso é com você.

Se você quiser saber como esses "modos" realmente diferem, há apenas um pouco de escape em gksu . Você precisa seguir em libgksu . Esta é a biblioteca que realmente verifica as permissões antes de entregá-las ao sistema.

Se nenhum modo for especificado (por exemplo, você chamar gksu sem argumentos) até atingir libgksu , ele será verificado Gconf (como Stefano aponta) e se ele ainda não puder decidir, o padrão será su .

    
por Oli 11.01.2011 / 13:22
37

No Ubuntu (!), não há diferença.

  • gksu normalmente faz login no usuário root e executa um aplicativo nesta sessão. No entanto, no Ubuntu, o padrão é usar o "modo sudo", o que equivale a executar gksudo . Isso porque no ubuntu, você não pode logar como root por padrão.

  • gksudo é o equivalente gráfico de sudo (e, como aponta Oli, apenas um link simbólico para o gksu)

Da entrada gconf do gksu:

Além disso, na diferença entre sudo e gksudo:

% bl0ck_qu0te%     
por Stefano Palazzo 11.01.2011 / 13:18
14

Eu sei que este é um segmento antigo, mas eu tenho pediu para lhe dizer sobre uma diferença sutil mas essencial entre gksu e gksudo .

Embora tenha olhado longa e duramente, não posso encontrar uma diferença documentada em qualquer lugar, e ainda existe. Eu também não descobri por que há uma diferença. Achei isso da maneira mais difícil quando acidentalmente apaguei alguns arquivos de sistema precisamente por causa dessa diferença (discutida em um tópico nos Fóruns do Ubuntu ) - Eu estava usando gksu , mas desde então sempre usei sempre gksudo .

Para resumir, tente isso.

  1. Crie três arquivos em alguma pasta:
    touch abc e touch abc.tmp e touch abctmp
  2. Execute os seis comandos a seguir. Os primeiros cinco dão o mesmo resultado (esperado) (ou seja, apenas abc.tmp ), enquanto o sexto inclui um arquivo extra ( abctmp ) que não deveria.

    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 os problemas quando você substitui -print por -delete no comando find (que é exatamente o que aconteceu comigo, fazendo com que alguns arquivos do sistema sejam excluídos).

Então, use gksudo em vez de gksu .

    
por Paddy Landau 30.04.2013 / 15:42

Tags