Как получить доступ к NSUserDefaults другого пользователя, будучи root?

#macos #nsuserdefaults #cfpreferences

#macos #nsuserdefaults #cfpreferences

Вопрос:

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

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

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

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

 AuthorizationExecuteWithPrivileges()
 

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

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

Ответ №1:

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