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

17

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

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

Я старался

$ su Bob
$ open -a Firefox

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

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

Яри ​​Кейнянен
источник

Ответы:

16

Из командной строки вы должны найти исполняемый файл 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 , но оно давно прекращено . Это чтобы сбросить значок приложения на значок или окно псевдо.

user151019
источник
Ах, ключ был в том, чтобы найти исполняемый файл Unix. Это работает также с, suесли кто-то не хочет sudo. Благодарность!
Яри ​​Кейнянен
Хм, при попытке запустить Google Chrome я получаю это:Trace/BPT trap: 5
Войцех Беднарски
При использовании этого sudoподхода я получаю сбои при входе, даже если я использую правильный пароль для другого пользователя. suработает с другой стороны (без пароля для корневого набора)
LapplandsCohan
@lapplandscohan sudo принимает пароль текущего пользователя
user151019
1
@ evan.bovie YTes показывает, что они думали о безопасности
user151019
4

См. 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.

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

Грэм Милн
источник
0

Вам нужно ssh. То есть ssh username@123.456.00. Как вы сказали, вам понадобится пароль для пользователя. Тогда вы можете делать то, что вы просите. Вам нужно будет включить удаленный вход в систему через Системные настройки> Общий доступ:
Настройки удаленного входа
тогда вы можете просто сделать, open -a Firefoxи Firefox откроется как другой пользователь, а не как ваш.

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