2009-09-10 15 views
0

L'application sur laquelle je travaille nécessite la possibilité d'éditer certains fichiers protégés sous Linux, OSX et Windows [Vista]. Généralement, 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 pour demander à l'utilisateur de vérifier qu'il souhaite autoriser l'application à effectuer ces opérations en tant qu'administrateur.Ouverture/Ecriture de fichiers en tant qu'administrateur/root en C++ (UAC/gksudo/etc.)

En général, je crois que Windows Vista utilise les fichiers manifestes, OSX la bibliothèque d'autorisations (https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html) et Linux a une variété de frontaux sudo.

Existe-t-il une manière multi-plateforme généralement acceptable de 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 soit capable d'ouvrir un fichier protégé pour les opérations de lecture/écriture, puis de revenir en mode utilisateur normal.

Répondre

0

Pour Windows Vista, vous avez essentiellement besoin d'un processus dédié pour effectuer des actions administratives. Comme vous le mentionnez, le processus admin-enabled aura besoin d'un manifeste pour spécifier le niveau d'exécution demandé (voir ce MSDN article pour plus de détails). Si vous observez de près toute application Windows qui démarre sans élévation et prend en charge l'élévation elle-même, vous verrez qu'elle ouvre réellement un nouveau processus une fois que les privilèges administratifs sont nécessaires (par exemple, allez dans le Gestionnaire des tâches lorsque l'UAC est activé, cliquez sur "Afficher les processus de tous les utilisateurs" et notez comment il réouvre avec les privilèges administrateur). Donc, 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 d'administration à appeler pour effectuer les opérations d'administration. Les deux processus auraient besoin de communiquer via des moyens sécurisés (peut-être un secure named pipe) afin que le travail d'administration puisse être effectué au nom du processus standard.

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

+0

Merci pour cette information. – Michael