【问题标题】:OS X, app can't obtain root previliges when started from standard userOS X,应用程序从标准用户启动时无法获得root权限
【发布时间】:2012-05-10 01:56:04
【问题描述】:

我正在尝试为 OS X 创建安装程序。为了能够写入 root 拥有的目录(/Applications、/Library...),我正在使用安全框架中的授权服务。以下代码适用于管理员用户,但适用于标准用户失败。权限的创建工作没有错误消息,但进程仍然以较低的权限运行(在提到的位置没有写入文件)。

当然,我使用管理员用户的登录名/密码进行身份验证。

    AuthorizationRef authRef;

    char rightName[] = "system.install.root.user";
    AuthorizationItem   kActionRight = { rightName, 0, 0, 0 };
    AuthorizationRights rights = {1, &kActionRight};
    AuthorizationFlags flags=kAuthorizationFlagExtendRights|kAuthorizationFlagInteractionAllowed;

    OSStatus err = AuthorizationCreate(&rights, 0, flags, &authRef);

    // [ write to a file in /Applications; doesn't work with standard users ]

    if (authRef != 0)
       AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);     

我知道有使用 AuthorizationExecuteWithPrivileges() 的示例,但由于这在 OS X 10.7 中已被弃用,我宁愿避免使用它。知道我做错了什么或者我需要做什么才能获得 root 权限吗?

感谢您的帮助,

克里斯

【问题讨论】:

    标签: macos installation privilege


    【解决方案1】:

    也许您需要使用 PackageMaker 而不是编写自己的安装程序。这可以节省您的时间...根据您的要求,您可以使用 HelperTools 自动将二进制文件复制到 /Library...

    【讨论】:

    • 这是一个网络安装程序,所以 PackageMaker 不是一个真正的选择。我会看看 HelperTools。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2011-08-21
    • 1970-01-01
    • 2011-10-15
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多