objective-c - Cocoa - 获得 NSFileManager 的根访问权限

标签 objective-c cocoa root nsfilemanager

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

我查看了 Apple 提供的 BetterAuthorizationSample 代码,但我似乎无法让 NSFileManager 在获得用户批准后运行其任务。

最佳答案

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

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


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


使用 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];

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


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

关于objective-c - Cocoa - 获得 NSFileManager 的根访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599447/

相关文章:

c++ - 具有 root 权限的库 (.so)

tomcat - 在 VPS 上使用 Let's Encrypt 证书运行 spring boot 时出现问题

ios - Container View 好像有 UINavigationBar 一样被下推?

iphone - NSURLRequest 设置 HTTP header

swift - 如何从 cocoa 应用程序运行终端命令?

android - 如何在没有 root 设备的情况下在 system/app 目录中安装 android 应用程序,以便用户无法卸载该应用程序

ios - 根据内容增加 UITextView 的高度

objective-c - iOS:NSString始终为空的问题

ios - 在 ios 中展开和折叠表格 View 单元格

objective-c - 如何获取当前正在执行的 NSOperation?