Cocoa - 获取NSFileManager的Root访问权限

lab*_*b12 6 cocoa objective-c root nsfilemanager

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

我已经查看了Apple提供的BetterAuthorizationSample代码,我似乎并没有让NSFileManager在获得用户批准后运行其任务.

Ita*_*ber 3

更新:为了更新仍在使用此答案作为参考的人们,BLAuthentication请使用一个旧的且高度不推荐的函数,AuthorizationExecuteWithPriviledges该函数在工作时违反了现代安全范例,并且已被弃用(并且已经有一段时间了)。从技术上讲,您仍然可以使用它,但如果您正在为 Mac OS X Lion 进行开发,我们非常欢迎您使用 ServicesManagement 框架,该框架允许您以辅助工具的权限运行代码。

有关如何创建和启动特权帮助器工具的参考,请查看我的问题之一,使用 SMJobBless() 编写特权帮助器工具


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


对于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];
Run Code Online (Sandbox Code Playgroud)

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


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