Qual é a diferença entre gksudo e gksu?

58

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

Sid
fonte

Respostas:

39

Ambos os arquivos apontam para o mesmo local:

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

... gksudoestá vinculado a gksu. Mas isso não significa que eles fazem as mesmas coisas, longe disso.

Os aplicativos podem detectar o comando usado para executá-lo. Isso geralmente ocorre argv[0]em linguagens no estilo C ou $0em scripts shell no estilo Bourne. O aplicativo pode analisar isso e, neste caso, na verdade, altera como ele funciona. A primeira indicação disso está na man gksupágina:

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

Se você procurar na fonte ( apt-get source gksu) run_mode, verá como ele 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 esse com os --su-mode/ -we --sudo-mode/ -Sargumentos (assim você pode executar comandos equivalentes sem a necessidade da gksudoligação simbólica ... Mas isso é até você.

Se você quiser saber como esses "modos" realmente diferem, há apenas um pouco de escape gksu. Você precisa segui-lo 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 gksusem argumentos) quando chegar libgksu, ele verificará o Gconf (como Stefano aponta) e, se ainda não puder decidir, o padrão será o sumodo.

Oli
fonte
11
Para adicionar ao comentário de Oli; Embora gksudo é ligada simbolicamente a gksu, No Ubuntu, por padrão, vamos única estar usando gksudo porque temos o apps / gksu / sudo-mode / habilitado. Portanto, a menos que alguém force a opção --su-mode, o gksu não é usado.
Vish
5
@Oli: Eu não concluiria imediatamente que não há diferença apenas porque é um link simbólico. Observe o busybox, dependendo do nome do link simbólico, diferentes ações são executadas. Nesse caso, não sei se é verdade ou não, mas o AFAIK é realmente o caso.
Lekensteyn
11
-1, muito enganador: o software pode se comportar de maneira diferente dependendo do nome que foi usado para invocá-los. Por exemplo, bashativa o modo estrito POSIX quando chamado como sh. E também gksu está ciente do nome da chamada.
MestreLion
Usando a internet no meu celular com uma tela muito pequena e dedos muito grandes, devo ter inadvertidamente recusado. I upvoted para compensar :)
Jacob Vlijm
37

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

  • gksunormalmente efetuaria login no usuário raiz e executaria um aplicativo nesta sessão. No entanto, no Ubuntu, o padrão é usar o "modo sudo", que é equivalente à execução gksudo. Isso ocorre porque no ubuntu, você não pode fazer login como root por padrão.

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

Na entrada gconf do gksu:

texto alternativo

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

Você nunca deve usar o sudo normal para iniciar aplicativos gráficos como root. Você deve usar o gksudo (kdesudo no Kubuntu) para executar esses programas. O gksudo define HOME = ~ root e copia .Xauthority para um diretório tmp. Isso evita que os arquivos no diretório inicial sejam de propriedade da raiz. (AFAICT, isso é tudo o que há de especial no ambiente do processo iniciado com gksudo vs. sudo).
 - (a partir da documentação da comunidade via Chris Wilson )

Stefano Palazzo
fonte
14

Eu sei que esse é um tópico antigo, mas me pediram para falar sobre uma diferença sutil, mas essencial, entre gksue gksudo.

Embora eu tenha procurado por muito tempo, não consigo encontrar uma diferença documentada em nenhum lugar e, no entanto, ela existe. Também não descobri por que há uma diferença. Achei isso da maneira mais difícil quando acidentalmente excluí alguns arquivos do 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 me certifico de usá-lo gksudo.

Para resumir, tente isso.

  1. Crie três arquivos em alguma pasta:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Execute os seis comandos a seguir. Os cinco primeiros 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 ao substituir -printpor -deleteno findcomando (que é exatamente o que aconteceu comigo, fazendo com que alguns arquivos do sistema sejam excluídos).

Então, por favor use em gksudovez de gksu.

Paddy Landau
fonte
Só tentei isso em 12.04LTS. Ainda não entendo completamente o porquê, mas há uma diferença. O código de fonte para espectáculos gksu que gksudoé equivalente a tipagemgksu --sudo-mode
Warren Hill
@WarrenHill - sim, em teoria! Mas não na prática. Eu não sei porque.
Paddy Landau
2
Interessante e verificado em 13.04. Definitivamente parece um erro de manipulação de cotação.
L0b0
4
Arquivado um bug .
L0b0
11
@ l0b0 - obrigado, adicionei meu voto ao bug.
Paddy Landau