从启动守护程序以特定用户身份启动应用程序



我目前正在尝试以特定用户身份从 LaunchDaemon 启动/Applications中的应用程序。有没有办法在不授予程序root权限的情况下启动此应用程序?我正在目标 C 中编写守护进程。

在启动守护程序的 plist(应位于/Library/LaunchDaemons(中,您可以设置UserName键:

<key>UserName</key>
<string>userForThisProcess</string>

其中userForThisProcess是要用于运行应用程序的用户。

我现在以有点古怪的方式解决了这个问题。我将NSTasksudoopen结合使用。也许将来有人需要这个:

+ (bool)start_app_bundle_as_user:(NSString *)path with_user_name:(NSString *)user_name
{
NSString *cmd = [NSString stringWithFormat:@"/usr/bin/sudo -i -u %@ -- open -a %@", user_name, path];
NSTask *task = [[NSTask alloc] init];
NSArray *args = [NSArray arrayWithObjects:@"-c", cmd, nil];
[task setLaunchPath:@"/bin/sh"];
[task setArguments:args];
[task launch];
[task waitUntilExit];
return [task terminationStatus] == 0;
}