2010-10-20 7 views
2

Je construis une application Cocoa qui modifie un fichier sur le système d'exploitation de l'utilisateur qui nécessite une autorisation d'administrateur. J'ai une preuve de concept de travail qui utilise authopen mais il ne fournit pas l'expérience UX que j'espère atteindre. Chaque fois que le fichier est modifié, il invite l'utilisateur à entrer son mot de passe. Y at-il un moyen d'avoir des autorisations accordées à l'application pour la durée de sa vie?Affichage du mot de passe Invite seulement une fois - Comment?

Objectif: application demande à l'utilisateur un mot de passe une fois jamais, aller en avant l'application ne demande pas de mot de passe.

Next Best: application demande à l'utilisateur un mot de passe une fois lors de l'application lancement, l'application va de suite ne demande pas de mot de passe jusqu'au redémarrage de l'application. Je connais les services d'autorisation et la possibilité de créer un démon qui traite spécifiquement de la modification de fichiers privilégiés. Ce qui m'intéresse, c'est si l'un de mes objectifs répertoriés est même possible avant de plonger trop profondément dans un autre système.

Vraiment apprécier des suggestions, des critiques ou des liens utiles.

Cheers, Dustin

Répondre

2

Oui, à l'aide des services d'autorisation est la voie à suivre. Vous obtenez un AuthorizationRef dans votre application via AuthorizationCopyRights() (qui montre l'interface utilisateur si nécessaire), et passez cela à votre assistant (en l'empaquetant dans un formulaire externe) qui vérifie qu'il a réellement le droit nécessaire avant d'effectuer la tâche privilégiée . Les services d'autorisation peuvent enregistrer des droits dans la base de données /etc/authorization. Ainsi, si vous choisissez un droit personnalisé, vous pouvez choisir les paramètres par défaut pour savoir qui est autorisé à l'acquérir, le délai d'attente ou d'autres conditions, etc. Pour déployer votre outil d'assistance privilégié, vous devez utiliser l'infrastructure de gestion des services, en particulier SMJobBless() qui vérifie que les identités de signature de code sur votre client et votre assistant correspondent avant de déployer l'assistant en tant que travail launchd. Votre assistant peut alors être initié à la demande par l'application principale. N'hésitez pas à demander si vous voulez des éclaircissements sur une étape de la réponse, mais j'ai déjà écrit à propos de ces deux aspects de la séparation des privilèges dans mon livre Professional Cocoa Application Security alors n'hésitez pas à acheter une copie ou deux ;-).

Questions connexes