Qual'è la differenza tra gksudo e gksu?


58

C'è qualche differenza tra il comportamento di gksu fooe gksudo foo?
Possono essere usati in modo intercambiabile?

Risposte:


39

Entrambi i file puntano nello stesso posto:

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

... gksudoè collegato a gksu. Ma questo non significa che facciano le stesse cose, tutt'altro.

Le applicazioni possono rilevare il comando utilizzato per eseguirlo. Questo è in genere argv[0]nei linguaggi in stile C o $0negli script di shell in stile Bourne. L'applicazione può vederlo e in questo caso, in realtà cambia il modo in cui funziona. La prima indicazione di questo è nella man gksupagina:

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

Se cerchi nel sorgente ( apt-get source gksu) run_mode, vedrai come rileva questo:

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

Puoi sovrascriverlo con gli argomenti --su-mode/ -we --sudo-mode/ -S(quindi puoi eseguire comandi equivalenti senza bisogno del gksudolink simbolico ... Ma dipende da te.

Se vuoi sapere come queste "modalità" differiscono davvero, c'è solo un po 'di evasione gksu. Devi seguirlo libgksu. Questa è la libreria che controlla effettivamente le autorizzazioni prima di passare al sistema.

Se non viene specificata alcuna modalità (ad esempio, si chiama gksusenza argomenti) quando raggiunge libgksu, controllerà Gconf (come sottolinea Stefano) e se ancora non riesce a decidere, passerà alla sumodalità predefinita .


1
Aggiungere al commento di Oli; Anche se gksudo è collegato simbolicamente a gksu, In Ubuntu, per impostazione predefinita ci sarà solo essere utilizzando gksudo perché abbiamo la / apps / gksu / sudo-mode abilitato. Quindi, a meno che qualcuno non imponga l'opzione --su-mode gksu non viene utilizzato.
Vish,

5
@Oli: non concluderei immediatamente che non c'è differenza solo perché è un collegamento simbolico. Guarda busybox, a seconda del nome del collegamento simbolico, vengono eseguite diverse azioni. In questo caso, non so se sia vero o no, ma AFAIK è davvero il caso.
Lekensteyn,

1
-1, molto fuorviante: il software potrebbe comportarsi in modo diverso a seconda del nome utilizzato per invocarli. Ad esempio, bashattiva la modalità rigorosa POSIX quando viene invocato come sh. Ed gksu è anche a conoscenza del nome dell'invocazione.
MestreLion,

Utilizzando Internet sul mio cellulare con schermo troppo piccolo e dita troppo grandi, devo aver involontariamente ridimensionato. Ho votato per compensare :)
Jacob Vlijm,

37

In Ubuntu (!) Non c'è differenza.

  • gksuaccederebbe normalmente l'utente root ed eseguirà un'app in questa sessione. Tuttavia, su Ubuntu, per impostazione predefinita utilizza la "modalità sudo", che equivale a funzionare gksudo. Questo perché su Ubuntu non è possibile accedere come root per impostazione predefinita.

  • gksudoè l'equivalente grafico di sudo(e come sottolinea Oli, solo un collegamento simbolico a gksu)

Dalla voce gconf di gksu:

testo alternativo

Inoltre, sulla differenza tra sudo e gksudo:

Non si dovrebbe mai usare sudo normale per avviare applicazioni grafiche come root. Dovresti usare gksudo (kdesudo su Kubuntu) per eseguire tali programmi. gksudo imposta HOME = ~ root e copia .Xauthority in una directory tmp. Ciò impedisce che i file nella directory home diventino di proprietà di root. (AFAICT, questo è tutto ciò che è speciale sull'ambiente del processo avviato con gksudo vs. sudo).
 - (dalla documentazione della comunità tramite Chris Wilson )


14

So che questo è un vecchio thread, ma mi è stato chiesto di parlarti di una differenza sottile ma essenziale tra gksue gksudo.

Anche se ho guardato a lungo e duramente, non riesco a trovare una differenza documentata da nessuna parte, eppure esiste. Inoltre non ho scoperto perché c'è una differenza. L'ho trovato nel modo più difficile quando ho cancellato accidentalmente alcuni file di sistema proprio a causa di questa differenza (discussa in un thread nei forum di Ubuntu ) - che stavo usando gksu, ma da allora mi sono assicurato di usarlo sempre gksudo.

Per riassumere, prova questo.

  1. Crea tre file in alcune cartelle:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Esegui i seguenti sei comandi. I primi cinque danno lo stesso risultato (atteso) (cioè solo abc.tmp) mentre il sesto include un file aggiuntivo ( abctmp) che non dovrebbe.

    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
    

Immagina i problemi quando lo sostituisci -printcon -deletenel findcomando (che è esattamente quello che mi è successo, causando l'eliminazione di alcuni file di sistema).

Quindi, per favore usa gksudoinvece di gksu.


Ho appena provato questo su 12.04LTS. Non capisco ancora completamente perché, ma c'è una differenza. Il codice sorgente di gksu mostra che gksudoequivale a digitaregksu --sudo-mode
Warren Hill il

@WarrenHill - sì, in teoria! Ma non in pratica. Non so perché.
Paddy Landau,

2
Interessante e verificato il 13.04. Assomiglia sicuramente a un bug di gestione delle quotazioni.
l0b0

4
Ha presentato un bug .
l0b0

1
@ l0b0 - grazie, ho aggiunto il mio voto al bug.
Paddy Landau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.