0

如果我的应用程序具有访问权限(例如运行 as 时root),它如何访问特定用户的首选项?

例如,假设用户从普通(管理员)帐户重新启动我的常规应用程序(捆绑包)作为 root,例如使用 sudo,如下所示:

sudo /Applications/MyApp.app/Contents/MacOS/MyApp

甚至来自一个应用程序

AuthorizationExecuteWithPrivileges()

如果我的应用程序现在调用NSUserDefaults.standardUserDefaults,它将访问存储在根用户主目录中的首选项。

我想让我的这个应用程序能够访问登录用户的首选项。

4

1 回答 1

0

我意识到必须有一种方法,因为我可以对defaults命令执行相同的操作:我可以指定 plist 文件的路径,如下所示:

sudo -s
defaults read /Users/username/Library/Preferences/some.plist.name

这将读取该用户的首选项,即使whoami返回root

因此,解决方案是这样做:

NSString *domain = @"/Users/username/Library/Preferences/some.plist.name";
NSUserDefaults myDefaults = [[NSUserDefaults alloc] initWithSuiteName:domain];

然后myDefaults在我的应用程序中使用。

更新

实际上,这是行不通的。起初我认为它会,但似乎这只会访问 root 用户的首选项。

因此,虽然必须有一种方法来实现这一点(如果 defaults 命令可以做到,那么我们也应该这样做),但这不是通过 NSUserDefaults。也许它适用于CFPreferencesAPI。将不得不继续调查。

于 2019-04-13T13:43:56.907 回答