AuthorizationExecuteWithPrivileges est obsolète
Depuis la mise à jour d'OSX 10.7 Lion, Xcode me dit que AuthorizationExecuteWithPrivileges
est obsolète.
Quelqu'un peut-il suggérer une manière de mon application peut écrire à un répertoire, il n'a pas l'autorisation pour?
Vous devez vous connecter pour publier un commentaire.
En fait,
AuthorizationExecuteWithPrivileges()
a été abandonné pour un temps très long, ce n'est que récemment que le fichier d'en-tête a été rattrapé par ce fait.Vous pouvez créer un privilégié outil d'aide dans le cadre de votre demande. Vous pouvez utiliser
ServiceManagement.framework
'sSMJobBless()
fonction pour avoir de l'aide déployée dans le systèmelaunchd
contexte: alors quand vous en avez besoin pour effectuer privilégié des tâches, vous venez de message privilégiés de l'aide pour faire ce travail.Il y a un peu de complexité cachée, dans l'application et l'aide doivent déclarer la signature de l'identité de l'autre avant de
SMJobBless()
croit qu'ils sont censés être utilisés ensemble, et vous avez besoin pour obtenir de l'éditeur de liens pour écrire l'aide de l'outilInfo.plist
fichier en binaire. C'est tout couvert par La Documentation d'Apple et Apple ont fourni un exemple de projet, trop.Je écrit d'un exemple d'application qui utilise
SMJobBless()
à déployer ses privilégié helper.AuthorizationExecuteWithPrivileges()
, c'est un horrible trou de sécurité. Le moyen de faire ce que vous voulez faire est avecSMJobBless()
.AuthorizationExecuteWithPrivileges
pour l'installateur? Référence dit que "Vous devez utiliser cette fonction uniquement pour permettre à l'installateur de s'exécuter en tant que root et de permettre à un setuid outil pour réparer le bit setuid en cas de perte" et de l'Autorisation des Services de Programmation Guide suggère d'utiliser cette fonction pour lancer les installateurs (bien que quelque peu obsolète). Est-il une alternative pour lancer l'installateur en simple application comme outil de ligne de commande?installer
utilitaire sur elle? Comment puis-je le faire sans l'aide de fonctionnalité obsolète. Puis-je utiliser les utilitaires système comme outil d'aide? Je comprends que je peux lancer l'installateur avec NSWorkspace classe. Mais je n'ai pas besoin d'une interface graphique d'installation de l'app, je veux le faire tranquillement et j'ai besoin d'installer un code de sortie du processus, j'ai donc besoin de l'attendre. Que pouvez-vous suggérons dans ce cas?Je sais que ça semble fou, mais ce fonctionne réellement:
Je suis de l'exécution d'un script à partir d'Objective C. Le seul inconvénient est que vous ne pouvez pas gagner permanent des privilèges root avec cette. Il vous demandera le mot de passe chaque fois que vous exécutez cette.
root
?! Oh wait, je suis. Non, attendez.. AppleScript est? Jésus. C'est certainement fou. La seule chose qui serait plus fou est que si elle ne l'a pas demandé votre mot de passe, lol.Sur un grand trouver par user950473 j'ai mis en place sa découverte comme une méthode; j'ai pensé partager le code dans le cas où c'est utile.
Exemple d'utilisation:
Il est très légèrement hacky, mais à mon humble avis est une solution satisfaisante.
AuthorizationExecuteWithPrivileges est en effet obsolète.
Mais heureusement, il existe une nouvelle méthode recommandée de procéder.
Que de 10,6 il y a la nouvelle API et il est recommandé d'installer un outil d'aide qui va effectuer l'opération privilégiée. Apple fournir un exemple de code qui démontrent clairement comment le gérer.
Assurez-vous de vérifier leur readme.txt car contrairement à d'autres exemple de code n'est plus à faire que de simplement télécharger le projet et à son exécution.
De La SMJobBless introduction à l'exemple
Source: Apple SMJobBless exemple de code