从objective-c运行sudo命令
如何从objective-c运行sudo命令?我能够使用以下方法运行不需要sudo的简单命令:从objective-c运行sudo命令,objective-c,Objective C,如何从objective-c运行sudo命令?我能够使用以下方法运行不需要sudo的简单命令: NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath: @"/bin/sh"]; NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil]; NSLog(@"run command:
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];
NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil];
NSLog(@"run command: %@",cmd);
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
return output;
当我运行sudo命令时,我得到一个错误:操作不允许
根据我在网上找到的信息,我需要获得授权。我阅读了苹果公司的授权文件,但没有具体说明
来自苹果的EvenBetterAuthorization示例不起作用
应用程序是用Apple ID签名的。您应该学习,但如果您想使用sudo
完成此操作,您可以
sudo
需要的是一个密码来授权执行,它通常从终端获取此密码-即与标准输入不相同,尽管在命令外壳中,默认情况下标准输入也连接到终端。sudo
的-S
选项指示它从标准输入读取密码
按照现有设计,您可以:
1) 将-S
添加到sudo
命令中
2) sudo
会将密码提示和任何错误消息(如无效密码)写入标准错误。创建一个管道并将其附加到任务standardError
,或将现有管道同时附加到standardOutput
和standardError
,以捕获此输出
3) 创建另一个管道并将其附加到任务standardInput
。将密码后跟换行符写入该管道。当任务运行时,sudo
将读取密码并执行您的命令。当然,如果命令本身需要也将从管道读取的输入,那么您必须将其写入管道
HTH您需要获得授权的可能重复的“是”。这是你的问题吗?你是想以root用户身份运行命令,还是想通过
sudo
命令来使用它?如果你想通过sudo
你需要拥有/etc/sudoers
中拥有进程的用户的权限。我想执行命令:“sudo discoveryutil udnsflushcaches”来清理DNS缓存。是的,我需要获得授权。但我如何使用授权来执行该命令。该指南以:“重要提示:应用程序沙箱中不支持授权服务API,因为它允许权限提升。”我的应用程序是一个沙盒。如果你在沙盒中,你就不走运了-尝试调用sudo
应该会失败,因为你调用的任何其他应用程序都会继承你的应用程序沙盒限制。你或者不需要对你的应用程序进行沙箱处理,或者找到一种非特权的方式来实现你的目标。非常感谢你的回复。