Abertura / Escrevendo arquivos como administrador / root usando C ++ (UAC / gksudo / etc.)

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

  •  05-07-2019
  •  | 
  •  

Pergunta

A aplicação que estou trabalhando requer a capacidade de editar certa arquivos protegidos em todo Linux, OSX e Windows [Vista]. Geralmente, quando um aplicativo precisa fazer algo com privilégios elevados, um diálogo de solicitação de senha aparece pedindo ao usuário para verificar se eles querem permitir que o aplicativo para executar essas operações como administrador.

Eu acredito em geral, o Windows Vista utiliza arquivos de manifesto, OSX tem a biblioteca de Autorização ( https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html ) e Linux tem uma variedade de sudo frontends.

Existe uma maneira de plataforma cruzada geralmente aceitável de lidar com isso? Eu não quero que a minha candidatura ter que ser executado como usuário root, mas eu quero que ele seja capaz de abrir um arquivo protegido para operações de leitura / escrita, em seguida, retomar de volta ao modo de usuário normal.

Foi útil?

Solução

Para o Windows Vista, você precisa basicamente um processo dedicado a fazer ações administrativas. Como você menciona, o processo permitiu-admin vai precisar de um manifesto para especificar o nível de execução solicitado (ver este MSDN artigo para detalhes).

Se você olhar cuidadosamente para qualquer aplicação Windows que inicia não elevado e suportes "elevação" em si, você vai ver que ele realmente abre um processo totalmente novo, uma vez privilégios administrativos são necessários (por exemplo, ir para o Gerenciador de tarefas quando o UAC está habilitado , clique em "Mostrar processos de todos os usuários" e nota como ele reabre com privilégios de administrador).

Assim, para o Windows, a arquitetura, você provavelmente precisará exigiria dois processos: um processo padrão para fazer a maioria do trabalho, e um processo de administração para pôr em fazer as operações de administração. Os dois processos que precisam se comunicar através de alguns meios seguros (talvez um garantir chamado pipe) para que o trabalho de administração poderia ser feito em nome do processo padrão.

Esta abordagem pode ser generalizado através de outras plataformas, e talvez poderia ser abstraída em algum tipo de classe / interface para que detalhes específicos de plataforma não teria necessidade de vazar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top