2010-01-23 5 views
3

Quelle est la bonne façon d'exécuter quelque chose comme $sudo touch folder_name ou $sudo rm dans Objective-C/Cocoa? Je suis en train de changer et de déplacer quelques fichiers et j'ai besoin de privilèges élevés. Tout échantillon de code serait grandement apprécié. Merci.Utiliser les commandes sudo dans Cocoa et Objective-C?

+0

Pourquoi voulez-vous 'sudo' dans l'iPhone? – kennytm

+0

désolé mon esprit était errant. J'ai remplacé le tag par "mac". – Jeff

Répondre

11

Une façon de le faire est AuthorizationExecuteWithPrivileges(), mais cela est déconseillé pour le cours normal des choses. Principalement c'est pour les installateurs, je suppose.

Quelque chose comme:

AuthorizationRef auth = NULL; 
OSStatus err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagInteractionAllowed, &auth); 
err = AuthorizationExecuteWithPrivileges(auth, command, kAuthorizationFlagDefaults, args, NULL); 

Et vous ajoutez un contrôle approprié de err ...

Voir la documentation Authorization.

+0

merci c'est exactement ce que je cherchais. – Jeff

+0

Ceci n'est malheureusement plus supporté, mais vous pouvez utiliser un AppleScript pour exécuter un shell avec des privilèges élevés. – Nico

+0

Ou utilisez 'NSXPCConnection' – paper1111

2

Il y a plusieurs façons de procéder. Lequel vous choisissez dépend de ce que vous voulez faire. La manière la plus simple et la moins sûre consiste à définir simplement le bit s sur un outil d'aide supplémentaire que vous appelez à partir de votre code et qui fait ce qui nécessite des droits d'administrateur. Jetez un oeil à la BetterAuthorizationSample pour la manière la plus sophistiquée et compliquée d'exécuter du code privilégié. Le Authorization Services Programming Guide vous donne tout ce dont vous avez besoin.

+1

" Le moyen le plus simple et le moins sûr est de définir simplement le s-bit sur un outil auxiliaire que vous appelez de votre code et qui nécessite des droits d'administrateur. "C'est en fait ce que recommande Apple. Vous êtes supposé utiliser 'AuthorizationExecuteWithPrivileges' uniquement pour conférer le bit setuid à l'outil auxiliaire. L'idée est de confiner les pouvoirs root uniquement au code qui a besoin de pouvoirs (l'outil d'aide spécifique à la tâche), afin que le code qui n'a pas besoin de pouvoirs (votre application) n'en possède pas. C'est le principe du moindre privilège. –

Questions connexes