Аутентификация приложения GTK для выполнения с корневыми полномочиями

У меня есть приложение UI (использует GTK) для Linux, который требует, чтобы быть выполненным как корень (это читает и пишет/dev/sd*).

Вместо того, чтобы требовать, чтобы пользователь открыл корневую оболочку или использовал "sudo" вручную, каждый раз, когда он запускает мое приложение, интересно, может ли приложение использовать некоторый обеспеченный ОС API для получения корневых полномочий. (Отметьте: приложение gtk не может использовать "setuid" режим, таким образом, это не опция здесь.)

Преимуществом здесь был бы более легкий рабочий процесс: пользователь мог, от его учетной записи пользователя по умолчанию, дважды щелкают по моему приложению от рабочего стола вместо того, чтобы иметь необходимость открыть корневой терминал и запустить его оттуда.

Я спрашиваю это, потому что OS X предлагает точно это: приложение может попросить, чтобы ОС запустила исполняемый файл с корневыми полномочиями - ОС (а не приложение) затем просит, чтобы пользователь ввел свои учетные данные, проверяет их и затем запускает цель, как желаемый.

Интересно, существует ли что-то подобное для Linux (Ubuntu, например)

Разъяснение:

Так, после того, как намек на PolicyKit интересно, могу ли я использовать это для получения r/w доступа к "/dev/sd..." блочные устройства. Я нахожу, что documention довольно трудно понимает, таким образом, я думал, что сначала спрошу, возможно ли это вообще, прежде чем я проведу часы на попытку понять это напрасно.

Обновление:

Приложение является удаленным управляемым дисковым инструментом восстановления для неопытного пользователя Linux, и у тех новичков Linux не будет большого понимания использования sudo или даже изменения составов группы их пользователя, особенно если их диск только что начал капризничать, и они чертовски отсутствуют. Вот почему я ищу решение, которое избегает технических особенностей как это.

12
задан Thomas Tempelmann 12 March 2010 в 18:22
поделиться

1 ответ

Старый способ, простой, но постепенно отменяемый, - это GKSu . Здесь обсуждается будущее ГКСу.

Новый способ - использовать PolicyKit . Я не совсем понимаю, как это работает, но думаю, вам нужно запустить приложение с помощью команды pkexec .

ОБНОВЛЕНИЕ:

Глядя на пример кода на http://hal.freedesktop.org/docs/polkit/polkit-apps.html , кажется, что вы можете использовать PolicyKit для получения авторизации. для определенных действий , которые описаны в файлах .policy в / usr / share / polkit-1 / actions . Действие для выполнения программы от имени другого пользователя: org.freedesktop.policykit.exec . Кажется, я не могу найти действие для прямого доступа к блочным устройствам, но должен признать, что документация PolicyKit тоже ломает мне голову.

Так что, возможно, самый простой способ действий для вас - разделить код манипуляции с диском, требующий привилегий, в утилиту командной строки и запустить его из приложения с графическим интерфейсом пользователя с помощью g_spawn_ [a] sync () с pkexec . Таким образом, вам не придется беспокоиться о запросах действий и тому подобном. В любом случае, вероятно, будет плохой практикой запускать все приложение с графическим интерфейсом пользователя от имени пользователя root.

Еще одно предложение - спросить напрямую автора PolicyKit (Дэвида Цойтена). Или попробуйте опубликовать свой вопрос в списке gtk-app-devel.

4
ответ дан 2 December 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: