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

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

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

3 ответа

Решение

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

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

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

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

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

    $ pkexec rm -rf /

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

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

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

Прочитайте sudo руководство для -A ("Askpass") и -S (стандартный) варианты.

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

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

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

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

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

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