В чем разница между gksudo и gksu?

58

Есть ли разница между поведением gksu foo и gksudo foo ?
Можно ли их использовать взаимозаменяемо?

    
задан Sid 11.01.2011 в 11:52
источник

3 ответа

39

Оба файла указывают на одно и то же место:

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

... gksudo символически привязано к gksu . Но это не означает, что они делают те же самые вещи, далеко от него.

Приложения могут обнаруживать команду, используемую для ее запуска. Обычно это argv[0] в языках C-стиля или $0 в сценариях оболочки в стиле Bourne. Приложение может смотреть на это, и в этом случае на самом деле оно меняет способ его работы. Первое указание на это на странице man gksu :

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

Если вы посмотрите в источнике ( apt-get source gksu ) для run_mode , вы увидите, как он это обнаруживает:

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

Вы можете переопределить это с помощью аргументов --su-mode / -w и --sudo-mode / -S (так что вы можете запускать эквивалентные команды, не требуя символической ссылки gksudo ... Но это зависит от вас.

Если вы хотите знать, как эти «режимы» действительно отличаются друг от друга, в gksu есть лишь немного ускользания. Вы должны следовать за ним в libgksu . Это библиотека, которая фактически проверяет разрешения перед передачей в систему.

Если режим не указан (например, вы вызываете gksu без аргументов) к моменту достижения libgksu , он проверяет Gconf (как указывает Стефано) , и если он все еще не может решить, он по умолчанию будет использовать режим su .

    
ответ дан Oli 11.01.2011 в 12:22
источник
37

В Ubuntu (!) нет разницы.

  • gksu обычно регистрирует пользователя root и запускает приложение в этом сеансе. Однако на Ubuntu по умолчанию используется режим "sudo", что эквивалентно запуску gksudo . Это потому, что на ubuntu вы не можете войти в систему с правами root по умолчанию.

  • gksudo - графический эквивалент sudo (и, как указывает Оли, просто символическая ссылка на gksu)

Из записи gconf в gksu:

Кроме того, на разницу между sudo и gksudo:

You should never use normal sudo to start graphical applications as root. You should use gksudo (kdesudo on Kubuntu) to run such programs. gksudo sets HOME=~root, and copies .Xauthority to a tmp directory. This prevents files in your home directory becoming owned by root. (AFAICT, this is all that's special about the environment of the started process with gksudo vs. sudo).
 — (from the community documentation via Chris Wilson)

    
ответ дан Stefano Palazzo 11.01.2011 в 12:18
14

Я знаю, что это старый поток, но я был попросил сообщить вам о тонкой, но существенной разнице между gksu и gksudo .

Хотя я долго и трудно, я не могу найти документированную разницу в любом месте, и все же она существует. Я также не понял, почему есть разница. Я нашел это трудным путем, когда случайно удалил некоторые системные файлы именно из-за этой разницы (обсуждался в потоке в форумах Ubuntu ) - я использовал gksu , но с тех пор я всегда старался использовать gksudo .

Подводя итог, попробуйте это.

  1. Создайте три файла в одной папке:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Выполните следующие шесть команд. Первые пять дают одинаковый (ожидаемый) результат (т. Е. Только abc.tmp ), тогда как шестой включает дополнительный файл ( abctmp ), который он не должен.

    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
    

Представьте себе проблемы при замене -print -delete в команде find (это именно то, что произошло со мной, в результате чего некоторые системные файлы будут удалены).

Итак, используйте gksudo вместо gksu .

    
ответ дан Paddy Landau 30.04.2013 в 13:42