Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cocoa和Objective-C中使用sudo命令?_Objective C_Cocoa_Macos_Privileges_Sudo - Fatal编程技术网

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

在Cocoa和Objective-C中使用sudo命令?,objective-c,cocoa,macos,privileges,sudo,Objective C,Cocoa,Macos,Privileges,Sudo,从Objective-C/Cocoa中运行诸如$sudo touch folder\u name或$sudo rm之类的内容的正确方法是什么?我正在更改和移动一些文件,需要提升权限。任何代码示例都将不胜感激。谢谢。一种方法是authorization executewithprivileges(),但正常情况下不鼓励这样做。我想主要是为安装人员准备的 比如: AuthorizationRef auth = NULL; OSStatus err = AuthorizationCreate(NULL

从Objective-C/Cocoa中运行诸如
$sudo touch folder\u name
$sudo rm
之类的内容的正确方法是什么?我正在更改和移动一些文件,需要提升权限。任何代码示例都将不胜感激。谢谢。

一种方法是
authorization executewithprivileges()
,但正常情况下不鼓励这样做。我想主要是为安装人员准备的

比如:

AuthorizationRef auth = NULL;
OSStatus err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagInteractionAllowed, &auth);
err = AuthorizationExecuteWithPrivileges(auth, command, kAuthorizationFlagDefaults, args, NULL);
并添加对
错误
的适当检查


请参阅文档。

有几种方法可以做到这一点。你选择哪一个取决于你想做什么。最简单也是最不安全的方法是在一个额外的助手工具上简单地设置s位,这个工具可以从代码中调用,并执行需要管理员权限的操作。请看下面的示例,了解执行特权代码的最奇特和最复杂的方式


你所需要的一切都会得到

“最简单也是最不安全的方法是简单地在一个额外的助手工具上设置s位,你可以从代码中调用它,并执行需要管理员权限的操作。”这实际上是苹果公司推荐的方法。您应该只使用
AuthorizationExecuteWithPrivileges
将setuid位授予辅助工具。我们的想法是将根权限限制在只需要权限的代码(特定于任务的帮助工具),这样不需要权限的代码(您的应用程序)就没有权限了。这是最小特权的原则。你为什么想在iPhone中使用
sudo
?对不起,我的思绪一直在徘徊。我将标记替换为“mac”。遗憾的是,这不再受支持,但您可以使用AppleScript以提升的权限执行shell。或者使用
NSXPCConnection