Jaka jest różnica między gksudo a gksu?


58

Czy jest jakaś różnica między zachowaniem gksu fooa gksudo foo?
Czy można ich używać zamiennie?

Odpowiedzi:


39

Oba pliki wskazują to samo miejsce:

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

... gksudojest dowiązany do gksu. Ale to nie znaczy, że robią to samo, wręcz przeciwnie.

Aplikacje mogą wykryć polecenie użyte do jego uruchomienia. Zazwyczaj jest to argv[0]w językach $0w stylu C lub w skryptach powłoki w stylu Bourne'a. Aplikacja może na to patrzeć iw tym przypadku faktycznie zmienia sposób działania. Pierwsze wskazanie tego znajduje się na man gksustronie:

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

Jeśli spojrzysz na źródło ( apt-get source gksu) run_mode, zobaczysz, jak to wykrywa:

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

Możesz to zmienić za pomocą argumentów --su-mode/ -wi --sudo-mode/ -S(abyś mógł uruchamiać równoważne polecenia bez potrzeby użycia gksudodowiązania symbolicznego ... Ale to zależy od ciebie.

Jeśli chcesz wiedzieć, jak naprawdę różnią się te „tryby”, możesz tylko trochę uciec gksu. Musisz to śledzić libgksu. Jest to biblioteka, która faktycznie sprawdza uprawnienia przed przekazaniem do systemu.

Jeśli nie zostanie określony żaden tryb (np. Wywołujeszgksu bez argumentów), zanim osiągnie libgksu, sprawdzi Gconf (jak wskazuje Stefano), a jeśli nadal nie będzie mógł zdecydować, przejdzie w sutryb domyślny .


1
Aby dodać do komentarza Oli; Choć gksudo jest dowiązane do gksu, w Ubuntu domyślnie będziemy tylko używać gksudo ponieważ mamy włączony / apps / gksu / sudo-mode. Więc jeśli ktoś nie wymusi opcji --su-mode, gksu nie jest używane.
Vish,

5
@Oli: Nie od razu doszłbym do wniosku, że nie ma różnicy tylko dlatego, że jest to dowiązanie symboliczne. Spójrz na busybox, w zależności od nazwy dowiązania symbolicznego wykonywane są różne działania. W tym przypadku nie wiem, czy to prawda, czy nie, ale AFAIK rzeczywiście tak jest.
Lekensteyn,

1
-1, bardzo mylące: oprogramowanie może zachowywać się inaczej w zależności od nazwy użytej do ich wywołania. Na przykład bashwłącza tryb ścisły POSIX po wywołaniu jako sh. I gksu jest również świadomy nazwy wywołania.
MestreLion

Używając internetu na telefonie komórkowym ze zbyt małym ekranem i zbyt dużymi palcami, musiałem przypadkowo zanegować głosowanie. Głosowałem za rekompensatą :)
Jacob Vlijm

37

W Ubuntu (!) Nie ma różnicy.

  • gksunormalnie logowałby się jako użytkownik root i uruchamiał aplikację w tej sesji. Jednak w Ubuntu domyślnie używa „trybu sudo”, który jest równoważny z uruchomieniem gksudo. Wynika to z faktu, że na Ubuntu domyślnie nie można zalogować się jako root .

  • gksudojest graficznym odpowiednikiem sudo(i jak zauważa Oli, tylko symboliczny link do gksu)

Z wpisu gksu w gconf:

alternatywny tekst

Ponadto na temat różnicy między sudo i gksudo:

Nigdy nie powinieneś używać normalnego sudo do uruchamiania aplikacji graficznych jako root. Powinieneś używać gksudo (kdesudo na Kubuntu) do uruchamiania takich programów. gksudo ustawia HOME = ~ root i kopiuje .Xauthority do katalogu tmp. Zapobiega to posiadaniu plików w katalogu domowym przez root. (AFAICT, to wszystko, co jest szczególne w środowisku uruchomionego procesu z gksudo vs. sudo).
 - (z dokumentacji społeczności za pośrednictwem Chrisa Wilsona )


14

Wiem, że to stary wątek, ale zostałem poproszony o opowiedzenie o subtelnej, ale zasadniczej różnicy między gksui gksudo.

Chociaż długo i intensywnie szukałem, nigdzie nie mogę znaleźć udokumentowanej różnicy, a jednak ona istnieje. Nie dowiedziałem się również, dlaczego jest taka różnica. Znalazłem to w trudny sposób, gdy przypadkowo usunąłem niektóre pliki systemowe właśnie z powodu tej różnicy (omówione w wątku na forach Ubuntu ) - korzystałem gksu, ale od tego czasu zawsze starałem się używać gksudo.

Podsumowując, spróbuj tego.

  1. Utwórz trzy pliki w pewnym folderze:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Uruchom następujące sześć poleceń. Pierwsze pięć daje taki sam (oczekiwany) wynik (tj. Po prostu abc.tmp), podczas gdy szósty zawiera dodatkowy plik ( abctmp), którego nie powinien.

    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
    

Wyobraź sobie problemów podczas wymiany -printze -deletew findpoleceniu (co jest dokładnie to, co się ze mną stało, powodując niektóre pliki systemowe do usunięcia).

Więc użyj gksudozamiast gksu.


Właśnie wypróbowałem to na 12.04LTS. Nie rozumiem jeszcze w pełni dlaczego, ale jest różnica. Kod źródłowy gksu pokazuje, że gksudojest to równoważne z pisaniemgksu --sudo-mode
Warren Hill

@WarrenHill - tak, teoretycznie! Ale nie w praktyce. Nie wiem dlaczego.
Paddy Landau

2
Ciekawe i zweryfikowane 13.04. Zdecydowanie wygląda jak błąd obsługi cytatu.
l0b0

4
Złożył błąd .
l0b0

1
@ l0b0 - dzięki, dodałem swój głos do błędu.
Paddy Landau
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.