Открытие / запись файлов с правами администратора / root с использованием C ++ (UAC / gksudo / etc.)

StackOverflow https://stackoverflow.com/questions/1403266

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top