В чем разница между гксудо и гксу?

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

3 ответа

Решение

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

$ 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 в сценариях оболочки в стиле Борна. Приложение может посмотреть на это, и в этом случае, на самом деле, оно меняет свою работу. Первое указание на это в 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 Режим.

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

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

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

Из gconf записи gksu:

альтернативный текст

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

Вы никогда не должны использовать обычный sudo для запуска графических приложений от имени пользователя root. Вы должны использовать gksudo (kdesudo на Kubuntu) для запуска таких программ. gksudo устанавливает HOME=~root и копирует.Xauthority в каталог tmp. Это предотвращает принадлежность файлов в вашем домашнем каталоге пользователю root. (AFAICT, это все, что особенного в среде запущенного процесса с gksudo vs. sudo).
- (из документации сообщества через Криса Уилсона)

Я знаю, что это старая ветка, но меня попросили рассказать о тонкой, но существенной разнице между 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,

Другие вопросы по тегам