Как получить доступ к NSUserDefaults другого пользователя, когда он является пользователем root? - PullRequest
0 голосов
/ 13 апреля 2019

Если у моего приложения есть права доступа (например, при запуске как root), как оно может получить доступ к настройкам конкретного пользователя?

Например, предположим, что пользователь перезапускается с обычногоУчетная запись (Admin), мое обычное приложение (комплект) в качестве пользователя root, например, с sudo, например:

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

или даже из приложения с

AuthorizationExecuteWithPrivileges()

Если мое приложение теперь вызываетNSUserDefaults.standardUserDefaults, он получит доступ к префиксам, хранящимся в домашнем каталоге корневого пользователя.

Мне бы хотелось, чтобы мое приложение получило доступ к префиксам вошедшего в систему пользователя.

1 Ответ

0 голосов
/ 13 апреля 2019

Я понял, что должен быть способ, потому что я могу сделать то же самое с командой 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.

Итак, хотя должен быть способ сделать это (если команда по умолчанию может это сделать, то мы должны какхорошо), но это не через NSUserDefaults.Может быть, это работает с CFPreferences API.Придется продолжать расследование.

...