Ouverture / écriture de fichiers en tant qu’administrateur / root à l’aide de C ++ (UAC / gksudo / etc.)

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

  •  05-07-2019
  •  | 
  •  

Question

L’application sur laquelle je travaille nécessite la possibilité d’éditer certains fichiers protégés sous Linux, OSX et Windows [Vista]. En règle générale, lorsqu'une application doit faire quelque chose avec des privilèges élevés, une boîte de dialogue de demande de mot de passe apparaît et demande à l'utilisateur de vérifier s'il souhaite autoriser l'application à effectuer ces opérations en tant qu'administrateur.

Je crois qu'en général, Windows Vista utilise des fichiers Manifest, OSX dispose de la bibliothèque d'autorisation (a https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html ), et Linux a une variété de sudo interfaces.

Existe-t-il une méthode multi-plateforme généralement acceptable pour gérer cela? Je ne veux pas que mon application doive être exécutée en tant qu'utilisateur root, mais je veux qu'elle puisse ouvrir un fichier protégé pour les opérations de lecture / écriture, puis revenir au mode utilisateur normal.

Était-ce utile?

La solution

Sous Windows Vista, vous avez généralement besoin d’un processus dédié pour effectuer les tâches administratives. Comme vous l'avez dit, le processus activé par l'administrateur aura besoin d'un manifeste pour spécifier le niveau d'exécution demandé (voir ceci article MSDN pour plus de détails).

Si vous examinez de près une application Windows démarrant non surélevée et prenant en charge "élévation". vous verrez qu'il ouvre un nouveau processus une fois que les privilèges d'administration sont nécessaires (par exemple, accédez au Gestionnaire des tâches lorsque le contrôle de compte d'utilisateur est activé, cliquez sur "Afficher les processus de tous les utilisateurs" et notez comment il rouvre avec les privilèges d'administrateur).

Ainsi, pour Windows, l’architecture dont vous avez probablement besoin nécessiterait deux processus: un processus standard pour effectuer la majeure partie du travail et un processus administrateur à appeler pour effectuer les opérations admin. Les deux processus devraient communiquer via des moyens sécurisés (peut-être un tube nommé sécurisé ) afin que le travail d'administration puisse être effectué pour le compte du processus standard.

Cette approche peut être généralisée sur d'autres plates-formes et peut-être pourrait être résumée dans une sorte de classe / interface afin que les détails spécifiques à la plate-forme n'aient pas besoin de fuir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top