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

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

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

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

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

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

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

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

Update:

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

Ответ 1

Старый способ, простой, но теперь поэтапный, GKSu. Здесь обсуждается будущее 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 также ломает мой мозг.

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

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