MACOSX:如何从cocoa应用程序启动需要root权限的守护进程

时间:2013-02-07 06:53:24

标签: macos cocoa root daemon privileges

条件如下:用Objective-c编写的MacOSX 10.7和Cocoa图形应用程序。

我遇到了以下问题。 我无法从我的Cocoa应用程序中的/ user / bin文件夹启动守护程序应用程序。 我知道我应该拥有root权限。

我有安装程序,而不是* .pkg但是手动编写的安装程序应用程序。我需要在安装过程完成后启动我的守护进程。 如何在objective-c应用程序中增加权限级别?

我有这个代码。 但不推荐使用AuthorizationExecuteWithPrivileges调用。

我们不应该使用它。

AuthorizationItem authItem      = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights  = { 1, &authItem };
AuthorizationFlags flags        = kAuthorizationFlagDefaults |
                                  kAuthorizationFlagInteractionAllowed |
                                  kAuthorizationFlagPreAuthorize |
                                  kAuthorizationFlagExtendRights;

AuthorizationRef authRef = NULL;

OSStatus status = AuthorizationCreate(&authRights,
kAuthorizationEmptyEnvironment, flags, &authRef);

status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);

第二种方法是使用特权助手。 这种方式看起来非常复杂。 我只需要在安装后启动守护进程。

我可以要求用户重启mac。但我想避免它。

其他可能性是守护程序可执行文件上的SUID位。 但我认为这不安全。

我的问题是: 还有其他更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

嗯,这里可能有答案。

你需要:

  1. 使用您的操作创建一个shell脚本。
  2. 创建一个苹果脚本NSString,在其中请求执行shell脚本with administrator privilege
  3. 创建NSAppleScript的实例并执行apple脚本。
  4. 以下是更多详情:

    AuthorizationExecuteWithPrivileges is deprecated