Аутентификация приложения GTK для запуска с правами root - PullRequest
11 голосов
/ 08 марта 2010

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

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

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

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

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

Уточнение:

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

Обновление:

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

1 Ответ

3 голосов
/ 08 марта 2010

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

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

UPDATE:

Глядя на пример кода на 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.

...