成为root用户时如何访问其他用户的NSUserDefaults?

时间:2019-04-13 12:51:19

标签: macos nsuserdefaults cfpreferences

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

例如,假设用户从普通(管理员)帐户以root用户身份重新启动我的常规应用程序(捆绑),例如使用sudo,就像这样:

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

甚至从带有

的应用中
AuthorizationExecuteWithPrivileges()

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

我希望我的这个应用程序可以代替访问已登录用户的偏好设置。

1 个答案:

答案 0 :(得分: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实现的。也许它可以与CFPreferences API一起使用。将不得不继续调查。