Могу ли я запустить приложение от имени другого пользователя без фактического переключения пользователей?

Есть ли способ запустить приложение от имени другого пользователя, чтобы запущенное приложение использовало настройки/историю/ресурсы другого пользователя и т. д.?

Например: я вошел в систему как Алиса и хочу запустить Firefox как Боб, поэтому Firefox будет показывать историю просмотров Боба, а не Алисы.

Я попытался

$ su Bob
$ open -a Firefox

Но без видимого эффекта; на самом деле монитор активности показывает, что процесс Firefox запускается Алисой, а не Бобом.

Я понимаю, что мне потребуются учетные данные Боба, но это не проблема.

Ответы (4)

В командной строке вам нужно найти исполняемый файл Unix и запустить его с помощью sudo следующим образом:

$ sudo -u Bob /Applications/Firefox.app/Contents/MacOS/Firefox 

… или то же самое с su: (однако для этого также необходимо установить пароль для root, что я не рекомендую)

$ su Bob
$ /Applications/Firefox.app/Contents/MacOS/Firefox

(…или вышеперечисленное в одну строку:)

$ su Bob -c /Applications/Firefox.app/Contents/MacOS/Firefox

В прошлом самым простым способом для PPC Mac было использование Pseudo , но его уже давно не поддерживают . Это нужно для того, чтобы поместить значок приложения на значок или окно Псевдо.

Ах, ключ был в том, чтобы найти исполняемый файл Unix. Это работает также с su, если вы хотите этого не делать sudo. Спасибо!
Хм, при попытке запустить Google Chrome я получаю это:Trace/BPT trap: 5
При использовании этого sudoподхода у меня возникают проблемы со входом в систему, даже если я использую правильный пароль для другого пользователя. suработает с другой стороны (нет пароля для корневого набора)
@lapplandscohan sudo берет пароль текущего пользователя
Удивительно. Поистине удивительно. Обратите внимание, что macOS не разрешает совместное использование буфера обмена между приложением, работающим от имени другого пользователя, и основным пользователем.
@evan.bovie YT показывает, что они думали о безопасности

См. https://apple.stackexchange.com/a/102105/1860 , чтобы узнать, почему suне работает для всех приложений.

bsexec запуска

В последних версиях launchdесть возможность запуска приложений в рамках сеанса другого пользователя; хотя инженеры Apple не рекомендовали его повсеместное использование.

Используйте bsexecпараметр в launchctl , чтобы выбрать соответствующий сеанс пользователя:

 bslist [PID | ..] [-j]
          This prints out Mach bootstrap services and their respective states. While the namespace
          appears flat, it is in fact hierarchical, thus allowing for certain services to be only avail-
          able to a subset of processes. The three states a service can be in are active ("A"), inactive
          ("I") and on-demand ("D").

          If [PID] is specified, print the Mach bootstrap services available to that PID. If [..] is
          specified, print the Mach bootstrap services available in the parent of the current bootstrap.
          Note that in Mac OS X v10.6, the per-user Mach bootstrap namespace is flat, so you will only
          see a different set of services in a per-user bootstrap if you are in an explicitly-created
          bootstrap subset.

          If [-j] is specified, each service name will be followed by the name of the job which regis-
          tered it.

 bsexec PID command [args]
          This executes the given command in the same Mach bootstrap namespace hierachy as the given
          PID.

 bstree [-j]
          This prints a hierarchical view of the entire Mach bootstrap tree. If [-j] is specified, each
          service name will be followed by the name of the job which registered it.  Requires root priv-
          ileges.

Рекомендуемый подход состоит в том, чтобы написать билет задания launchd и перезапустить Mac или попросить пользователя выйти из системы и снова войти в нее.

Еще один метод:

# chown someuser command
# chmod u+s command
$ ./command

Благодаря wysota по адресу: http://www.qtcentre.org/threads/4730-Linux-Bash-Run-a-command-as-another-user

(Потратил много времени на поиски чего-то, что сработает в моей конкретной ситуации, и решил, что смогу поделиться богатством)

Вам нужно ssh. Т.е. ssh username@123.456.00_ Как вы сказали, вам понадобится пароль для пользователя. Тогда вы можете делать то, что вы просите. Вам нужно включить удаленный вход в System Prefs> Sharing:
Удаленный вход в систему
Затем вы можете просто сделать это, open -a Firefoxи Firefox откроется как другой пользователь, а не как ваш.

К сожалению, я получаю: LSOpenURLsWithRole() failed for the application /Applications/Firefox.app with error -10810.при попытке open -a Firefox:-|
@koiyu Попробуйsudo open -na Firefox
он терпит неудачу, как указано выше :-/ (также не удается использовать путь к исполняемому файлу unix, хотя и по-другому.)
@koiyu Разрешения? Что ls -lговорит для Firefox?
Процессы, запущенные из сеанса SSH, не имеют доступа к графическому интерфейсу. Если это работает в вашей системе, я подозреваю, что в какой-то момент вы изменили какую-то низкоуровневую конфигурацию.
Так что это не сработает в моем случае; но для тех, кому не нужен графический интерфейс приложения, это может быть приемлемой альтернативой :-)
@koiyu: sudoОпция, упомянутая в другом ответе (с путем к исполняемому файлу), работает, по крайней мере, под Lion.
@patrix, да, это потому, что он не использует SSH. (Кроме того, поскольку это работает, я принял ответ.)
@Тобиас Нет. Ничего не изменил. Просто подключитесь по SSH, open -a <application>и он откроет графический интерфейс приложения.
@daviesgeek, но вы подключились по SSH к пользователю, отличному от того, у которого в настоящее время есть графический интерфейс, как того хотел ОП.