我目前正在尝试以特定用户身份从 LaunchDaemon 启动/Applications
中的应用程序。有没有办法在不授予程序root权限的情况下启动此应用程序?我正在目标 C 中编写守护进程。
在启动守护程序的 plist(应位于/Library/LaunchDaemons(中,您可以设置UserName
键:
<key>UserName</key>
<string>userForThisProcess</string>
其中userForThisProcess
是要用于运行应用程序的用户。
我现在以有点古怪的方式解决了这个问题。我将NSTask
与sudo
和open
结合使用。也许将来有人需要这个:
+ (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;
}