Есть ли десктоп-нейтральный гксудо?

17

Существуют различные инструменты для различных рабочих столов, которые предназначены для запуска графического приложения от имени пользователя root. gksudo, kdesudo, empowerИ т.д. ...

Но что, если я пишу сценарий, который можно использовать на любом рабочем столе Linux? Есть ли xdg-sudoкакой-то ..? Стандарт для получения доступа sudo в среде рабочего стола?

Оли
источник

Ответы:

16

Следуя предложению @Tachyons, я исследовал много, pkexecи это потрясающе !

  • Это часть PolicyKit , широко используемого пакета.
  • Размещено и спонсируется freedesktop.org
  • По умолчанию в Gnome , Unity , MATE , Cinnamon , KDE , LXDE и XFCE и, возможно, других
  • Работает через D-Bus, поэтому он полностью нейтрален к рабочему столу с четко определенным протоколом.
  • Во многих DE он используется в нескольких сервисах, таких как экран входа в систему, выключение / перезапуск, управление дисками (udisks / automount) и так далее.

Так что да, он отвечает всем требованиям, и я думаю, это самое близкое, что может быть «универсальное гксудо» .

Тем не менее, pkexecэто интерфейс командной строки для PolicyKit. Есть 2 основных режима работы:

  • Просто запустите его, как и в случае с sudo, и вы получите хорошую подсказку с графическим интерфейсом:

    $ pkexec rm -rf /

pkexec GUI, подсказка

  • Или создайте файл авторизации PolicyKit для своего приложения, вставьте его /usr/share/polkit-1/rules.d, и он позволит использовать множество параметров, связанных с настройкой и безопасностью, например, доступ с правами root только для определенных действий, не нужен пароль для других, доступ ограничен определенными путями. и т. д. Вы можете настроить ваши параметры с удивительной детализацией.
MestreLion
источник
6

Более общим способом было бы написать «вспомогательную программу». Такая программа предложит пользователю ввести пароль; если вы уверены, что, скажем, Zenity установлен, вы можете использовать это, в противном случае вам нужно будет написать вспомогательную программу на Python или что-то еще, что может взаимодействовать с GUI.

Прочтите sudoруководство по -Aопциям ("askpass") и -S(stdin).

И помните, что когда вы запускаете sudoиз своего скрипта, вам нужна -Hопция (home) для симуляции gksudo.

Этот метод работает хорошо, но вам необходимо тщательно протестировать вспомогательную программу, чтобы убедиться, что она не содержит ошибок.

Падди Ландау
источник
1
Вам также необходимо обрабатывать передачу токенов xauth в вашей программе, что не является тривиальным.
Symcbean
4

Нет, стандартного способа получения привилегий root (или любого другого пользователя) не существует.

Если вы хотите быть совместимыми с как можно большим количеством систем, не предполагайте, что это так, а скажите пользователю, что он / она должен запустить ваш скрипт как конкретный пользователь. Затем пользователь / администратор должен настроить систему так, чтобы ваш скрипт выполнялся должным образом.

Было бы неплохо сделать несколько советов о том, как использовать наиболее распространенные системы аутентификации, такие как su, sudo и ConsoleKit.

Флориан Диш
источник
Правда в начале 2009 года, но, к счастью, сейчас polkit(ранее PolicyKit) достаточно широко распространен, чтобы считаться стандартом.
MestreLion