Comment utiliser NSTask en tant que root?
Dans une application que je suis en train de faire j'ai besoin d'exécuter la commande suivante en tant que root (utilisateur sera invité trice si ils veulent vraiment, et il leur sera demandé de démonter leurs lecteurs) à l'aide de NSTask:
/bin/rm -rf /
#Yes, really
Le problème est que, tout simplement, à l'aide de Substituer l'Utilisateur N' (sudo
) ne fonctionne pas tant que l'utilisateur doit entrer le mot de passe pour le non-disponible stdin. Je serais plutôt du genre à montrer à l'utilisateur la même fenêtre que vous voyez lorsque vous cliquez sur le cadenas dans les Préférences.app, comme ceci (je l'espère avec un court mot de passe):
capture d'écran http://www.quickpwn.com/wp-content/uploads/2009/08/snow-leopard-enter-password.png
Quelqu'un peut-il m'aider? Merci.
OriginalL'auteur | 2010-10-29
Vous devez vous connecter pour publier un commentaire.
Découvrez STPrivilegedTask, Objective-C classe wrapper autour de AuthorizationExecuteWithPrivileges() avec un NSTask-comme l'interface.
Si je veux exécuter certaines tâches en tant que root, il sera de demander de l'utilisateur mot de passe? J'ai essayé ce et de travail, mais l'utilisateur doit entrer son mot de passe.
OriginalL'auteur svth
C'est l'un des plus difficiles tâches à accomplir correctement sur Mac OS X.
Le guide de documenter la façon de le faire est le L'Autorisation Des Services De Guide De Programmation. Il y a plusieurs possibilités, comme d'habitude, le plus sûr est le plus difficile à mettre en œuvre.
J'ai commencé l'écriture d'un outil qui utilise le démon launchd (le moyen le plus sécurisé), les le code est disponible sur google code. Donc, si vous voulez, vous pouvez copier ce code.
OriginalL'auteur Georg Schölly
Je pense que je peux maintenant répondre à cette question, grâce à quelques recherches sur Google et beau trouver dans cette SORTE de question. Il est très légèrement hacky, mais à mon humble avis est une solution satisfaisante.
J'ai écrit ce générique de mise en œuvre qui devrait obtenir ce que vous voulez:
Exemple d'utilisation:
rm -rf /" with administrator privileges --
(qui se déroulera rm-rf avec des privilèges d'administrateur et de le commenter le reste de la ligne avec votre code légitime.OriginalL'auteur Carlos P
Bien, alors j'ai couru dans le présent tout en recherchant comment le faire correctement... je sais que c'est probablement la méthode la moins sécurisée de l'accomplissement de la tâche, mais probablement le plus facile et je n'ai pas vu cette réponse n'importe où. Je suis venu avec cette pour les applications que j'ai créé pour exécuter mes propres fins et que l'autorisation temporaire de routine pour le type de tâche que user142019 est en train de décrire. Je ne pense pas que Apple ne l'approuve pas. C'est juste un extrait, et ne comprennent pas d'une INTERFACE utilisateur formulaire de saisie ou de toute façon de capturer la sortie standard, mais il ya beaucoup d'autres ressources qui peuvent fournir ces pièces.
Créer un fichier vide appelé "script.sh" et l'ajouter à votre projet de la prise en charge de fichiers.
Ajouter ce fichier d'en-tête:
mise en œuvre:
La dernière étape est de sorte que vous n'avez pas de texte en clair le mot de passe admin assis dans votre bundle. Je recommande de s'assurer que rien au-delà de la méthode d'obfuscation d'une certaine façon.
OriginalL'auteur linguri
Dans un de mes cas, ce n'est pas correct:
J'ai simplement modifié le fichier /etc/sudoers pour permettre à l'utilisateur souhaité pour démarrer tout .sh script sans demander de mot de passe. Donc, vous pouvez exécuter un script shell qui contient une ligne de commande comme sudo sed [...] /etc/imprimantes.conf pour modifier les imprimantes.fichier conf et /etc/sudoers fichier contiendra cette ligne
myLocalUser ALL=(ALL) NOPASSWD: ALL
Mais bien sûr, je suis à la recherche d'une meilleure solution qui correctement invite l'utilisateur à saisir un mot de passe admin pour permettre le script ou NSTask à exécuter. Merci pour le code qui utilise AppleScript appel à l'invite de commandes et exécutez la tâche/script shell.
OriginalL'auteur Rosario Carcò