Использование NSHomeDirectory в качестве пользователя root

Странная проблема происходит с использованием NSHomeDirectory,

NSString *homeDirectory = NSHomeDirectory();
NSLog(@"homeDirectory is: %@",homeDirectory);

Как стандартный пользователь homeDirectory является /User/Paul, но когда приложение запускается с правами root, значение homeDirectory сейчас /var/root,

Это ошибка, или, может быть, это нормально, когда пользователь root? Как я всегда могу найти местоположение домашней папки "обычных пользователей", которые сначала запустили мое приложение, а затем получили права root?

2 ответа

Решение

Похоже, что домашний каталог пользователя root действительно установлен в /var/root в OSX.

В Linux это обычно /root/

Я предполагаю, что вы можете взять значение переменной среды $SUDO_USER, если приложение запускалось с правами root с помощью sudo, и использовать его для получения домашнего каталога.

[[[NSProcessInfo processInfo] environment] objectForKey:@"SUDO_USER"]

Помните, что файлы, созданные приложением при запуске от имени пользователя root, по умолчанию будут принадлежать пользователю root.

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

То, что вы видите, это то, что при запуске от имени пользователя root вы фактически переключаете активного пользователя. Права и (предыдущая и бывшая) принадлежность (в данном случае каталоги / файлы) включены!

Другие вопросы по тегам