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

58

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

Sid
источник

Ответы:

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.

Если вы посмотрите на source ( 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режим по умолчанию .

Оли
источник
1
Добавить к комментарию Оли; Хотя gksudo является символической ссылкой на gksu, В Ubuntu по умолчанию мы будем только использовать gksudo потому что у нас включена / приложения / gksu / Судо-режим. Так что, если кто-то не принудительно использует параметр --su-mode, gksu не используется.
Виш
5
@ Оли: Я бы не сразу пришел к выводу, что нет никакой разницы только потому, что это символическая ссылка. Посмотрите на busybox, в зависимости от имени символической ссылки выполняются разные действия. В этом случае, я не знаю, правда это или нет, но AFAIK это действительно так.
Лекенштейн
1
-1, очень вводит в заблуждение: программное обеспечение может вести себя по-разному, в зависимости от того, какое имя использовалось для их вызова. Например, bashвключает строгий режим POSIX при вызове как sh. И gksu это также известно имя вызова.
MestreLion
Используя интернет на моем мобильном телефоне со слишком маленьким экраном и слишком большими пальцами, я должен был непреднамеренно отказаться от голосования. Я проголосовал, чтобы компенсировать :)
Джейкоб Vlijm
37

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

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

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

Из gconf записи gksu:

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

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

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

Стефано Палаццо
источник
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.

Падди Ландау
источник
Только что попробовал это на 12.04LTS. Пока не до конца понимаю почему, но есть разница. Исходный код для gksu показывает, что gksudoэквивалентно вводу текстаgksu --sudo-mode
Уоррен Хилл
@WarrenHill - да, в теории! Но не на практике. Я не знаю, почему.
Пэдди Ландау
2
Интересно, проверено 13.04. Определенно выглядит как ошибка обработки цитаты.
10
4
Подали ошибку .
10
1
@ l0b0 - спасибо, я добавил свой голос за ошибку.
Пэдди Ландау