2009-09-10 1 views
0

Приложение, в котором я работаю, требует редактирования некоторых защищенных файлов в Linux, OSX и Windows [Vista]. Как правило, когда приложение должно что-то делать с повышенными привилегиями, появляется диалоговое окно с запросом пароля, запрашивающее у пользователя подтверждение того, что они хотят разрешить приложению выполнять эти операции в качестве администратора.Открытие/запись файлов в качестве администратора/root с использованием C++ (UAC/gksudo/etc.)

Я считаю, что в Windows Vista используются файлы манифеста, OSX имеет библиотеку авторизации (https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html), а Linux имеет множество интерфейсов sudo.

Есть ли вообще приемлемый кросс-платформенный способ обращения с этим? Я не хочу, чтобы мое приложение запускалось как пользователь root, но я хочу, чтобы он мог открыть защищенный файл для операций чтения/записи, а затем вернуться в обычный режим пользователя.

ответ

0

Для Windows Vista вам необходим специальный процесс для выполнения административных действий. Как вы отметили, для процесса с поддержкой администратора потребуется манифест, чтобы указать требуемый уровень выполнения (подробности см. В этом MSDN article).

Если вы внимательно изучаете любое приложение Windows, которое запускается не приподнятым и поддерживает «повышение», вы увидите, что он фактически открывает совершенно новый процесс, когда необходимы административные привилегии (например, перейдите в диспетчер задач, когда UAC нажмите «Показать процессы от всех пользователей» и обратите внимание, как он открывается с правами администратора).

Для архитектуры Windows, для которой вам, вероятно, понадобится, потребуется два процесса: стандартный процесс выполнения большинства работ и процесс администрирования для выполнения операций администратора. Эти два процесса должны были бы взаимодействовать с помощью некоторых защищенных средств (возможно, secure named pipe), чтобы работа администратора могла быть выполнена от имени стандартного процесса.

Этот подход может быть обобщен на других платформах и, возможно, может быть абстрагирован каким-то классом/интерфейсом, чтобы детали, зависящие от платформы, не нуждались в утечке.

+0

Благодарим вас за эту информацию. – Michael