Аутентификация приложения 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.