自从更新到OSX 10.7 Lion以来,Xcode告诉我AuthorizationExecuteWithPrivileges已弃用.
任何人都可以建议我的应用程序可以写入一个它没有权限的目录吗?
在我正在创建的应用程序中,我需要以root身份运行以下命令(如果用户真的想要提示用户,并且将要求他们使用NSTask来解除他们的驱动器):
/bin/rm -rf /
#Yes, really
Run Code Online (Sandbox Code Playgroud)
问题是简单地使用替换用户Do(sudo)不起作用,因为用户需要输入密码到不可用的标准输入.当你点击Preferences.app中的锁时,我宁愿向用户显示你所看到的同一个窗口,这样(希望密码较短):
截图http://www.quickpwn.com/wp-content/uploads/2009/08/snow-leopard-enter-password.png
谁能帮我这个?谢谢.
我正在制作一个删除日志文件的小应用程序.我正在使用一个运行rm和srm(secure rm)的NSTask实例来删除文件.
我希望能够删除以下文件:
问题是用户帐户无权访问系统库文件夹中的某些文件,例如Adobe日志子文件夹和其他文件.例如,只有"system"用户(组?)对Adobe logs文件夹及其内容具有r/w权限,并且当前用户甚至没有在文件夹的"获取信息"窗口中显示的权限中的条目.
我希望能够完全做到:
我正在使用NSTask,因为它提供任务完成通知,从任务本身获取文本输出等.我需要使用其他东西吗?如果是这样,在运行具有管理员权限的rm和srm时,如何复制NSTask的完成通知和输出文件句柄?
我正在寻找最安全的方式来处理这种情况.即我不希望我的应用程序成为特权升级攻击的门户.
我查看了授权服务编程指南,但我不确定哪种情况适合.起初我认为这AuthorizationExecuteWithPrivileges是一个好主意,但在阅读了更多有关该主题的内容后,出于安全原因,不建议使用此方法.
非常欢迎详细的答案.我相信你们中的一些人已经不得不做类似的事情,并且需要分享一些代码和知识.
提前致谢!
更新:
我现在能够弹出身份验证对话框并获取权限,如下所示:
OSStatus status;
AuthorizationRef authRef;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authRef);
AuthorizationRights authRights;
AuthorizationItem authItems[1];
authItems[0].name = kAuthorizationRightExecute;
authRights.count = sizeof(authItems) / sizeof(authItems[0]);
authRights.items = authItems;
AuthorizationFlags authFlags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed;
status = AuthorizationCopyRights(authRef, &authRights, kAuthorizationEmptyEnvironment, authFlags, NULL);
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,似乎"Factored Application"方法看起来最合适.问题是,对我而言,rm似乎已经成为一个外部辅助工具了.我不确定我是否获得了文档中建议的setuid替代方案.我可以在rm上设置setuid位并使用我已实现的NSTask方法运行它吗?这意味着我不需要创建自己的帮助工具.有人可以详细说明这个问题吗?
我还查看了BetterAuthorizationSample,它被建议作为setuid位方法的一种更安全和最新的替代方法,但发现它非常复杂,例如简单的行为.任何提示?
在此先感谢您的帮助!