Cocoa - 获取NSFileManager的Root访问权限

时间:2011-01-04 23:18:08

标签: objective-c cocoa root nsfilemanager

我需要在我的应用程序中使用NSFileManager移动系统文件,而我似乎没有root访问权限。获得此特权的最简单方法是什么?

我已经研究过Apple提供的BetterAuthorizationSample代码,我似乎并没有让NSFileManager在获得用户批准后运行其任务。

2 个答案:

答案 0 :(得分:3)

更新:要更新仍在使用此答案的人员作为参考,BLAuthentication会使用一个名为AuthorizationExecuteWithPriviledges的旧的,非常推荐的功能,该功能在工作时违反现代安全范式,已被弃用(已经有一段时间了)。从技术上讲,您仍然可以使用它,但如果您正在为Mac OS X Lion开发,那么您非常欢迎使用ServicesManagement框架,它允许您以特权作为帮助工具运行代码。

有关如何创建和启动特权帮助工具的参考,请查看我的一个问题Writing a Privileged Helper Tool with SMJobBless()


没有真正简单的方法来授权NSFileManager,因此您应该考虑使用在mv类的管理员身份验证下运行的标准cpBLAuthentication工具。遗憾的是,原作者的网站已关闭,但您可以轻松找到在Google上浮动的课程副本(如果您愿意,我也可以为您上传副本)。


使用BLAuthentication,你要做的是这样的事情:

#define MOVE @"/bin/mv"
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) {
    [[BLAuthentication sharedInstance] authenticate:MOVE];
}

NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil];
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments];

上面的代码将提示用户输入管理员密码,并对程序进行身份验证,默认时间为五分钟。


警告
当然,要小心系统文件!尽可能避免移动或操纵它们,特别是如果你的程序将在别人的计算机上运行(如果出现任何问题,你将被指责)!

答案 1 :(得分:3)