在Cocoa和Objective-C中使用sudo命令?

3

如何在Objective-C/Cocoa中以正确的方式运行类似于$sudo touch folder_name$sudo rm这样的命令?我正在修改和移动一些文件,需要提升权限。任何代码示例都将不胜感激。谢谢。


你为什么想在iPhone上使用“sudo”命令? - kennytm
抱歉,我的思维有些偏离了。我已经用“mac”替换了该标签。 - Jeff
2个回答

12

有一种方法是使用AuthorizationExecuteWithPrivileges(),但这在正常情况下不被鼓励使用,主要是用于安装程序。

类似于:

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

你需要加入适当的错误检查...

参见Authorization文档。


很遗憾,这已经不再受支持了,但是您可以使用AppleScript以提升的权限执行shell。 - Nico
或者使用 NSXPCConnection - Papershine

2
有几种方法可以实现这一点,你选择哪一种取决于你想做什么。最简单且不安全的方法是在一个额外的帮助工具上设置s位,然后从代码中调用它并执行需要管理员权限的操作。查看BetterAuthorizationSample,了解执行特权代码的最花哨和最复杂的方式。 Authorization Services Programming Guide提供了所需的所有内容。

1
最简单但不安全的方法是在您的代码中调用一个额外的辅助工具并设置s位,以执行需要管理员权限的操作。这实际上是苹果推荐的方法。您应该仅使用AuthorizationExecuteWithPrivileges将setuid位授予辅助工具。其思想是将根权限限制在仅需要权限的代码(特定任务的辅助工具)中,以便不需要权限的代码(您的应用程序)不会拥有它们。这是最小特权原则。 - Peter Hosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接