Posso iniciar um aplicativo como outro usuário sem realmente mudar de usuário?

17

Existe uma maneira de iniciar um aplicativo como outro usuário para que o aplicativo iniciado use as preferências / histórico / recursos do outro usuário e outros?

Por exemplo: eu entrei como Alice e gostaria de iniciar o Firefox como Bob, portanto, o Firefox mostraria o histórico de navegação de Bob em vez do de Alice.

eu tentei

$ su Bob
$ open -a Firefox

Mas sem efeito aparente; de fato, o Monitor de atividades mostra que o processo do Firefox está sendo executado por Alice - não por Bob.

Entendo que precisarei das credenciais de login de Bob, mas isso não é um problema.

Jari Keinänen
fonte

Respostas:

16

Na linha de comando, você precisa encontrar o executável do Unix e executá-lo usando o sudo da seguinte maneira:

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

… Ou o mesmo com su: (no entanto, também é necessário que você configure uma senha para root - o que eu não recomendo)

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

(… Ou acima em uma linha :)

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

No passado, a maneira mais fácil para os Macs PPC era usar o Pseudo , mas foi interrompido por muito tempo . Isso é para soltar o ícone do aplicativo no ícone ou na janela do Pseudo.

user151019
fonte
Ah, a chave era encontrar o executável do Unix. Funciona também com suse não se deseja sudo. Obrigado!
Jari Keinänen
Hmm, ao tentar executar o Google Chrome, recebo o seguinte: #Trace/BPT trap: 5
Wojciech Bednarski
Ao usar a sudoabordagem, recebo falhas de login, mesmo que eu use a senha correta para o outro usuário. sufunciona, por outro lado (sem senha para set root)
LapplandsCohan
@lapplandscohan sudo leva a senha do usuário atual
user151019
11
@ evan.bovie YTes mostra que eles pensaram em segurança
user151019
4

Consulte /apple//a/102105/1860 para saber por suque não funciona em todos os aplicativos.

bsexec do launchd

Versões recentes do launchdtêm a capacidade de iniciar aplicativos dentro da sessão de outro usuário; embora os engenheiros da Apple não tenham recomendado seu uso geral.

Use a bsexecopção no launchctl para direcionar a sessão de usuário apropriada:

 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.

A abordagem recomendada é escrever um tíquete de trabalho iniciado e reiniciar o Mac - ou solicitar ao usuário que efetue logout e logon novamente.

Graham Miln
fonte
0

Você precisa ssh. Ou seja ssh [email protected]. Como você disse, você precisará da senha do usuário. Então você pode fazer o que está pedindo. Você precisará habilitar o login remoto em Prefs do Sistema> Compartilhamento:
Preferência de Login Remoto
então, você pode simplesmente fazer open -a Firefoxe o Firefox abrirá como o outro usuário, não o seu.

daviesgeek
fonte
Infelizmente eu recebo: LSOpenURLsWithRole() failed for the application /Applications/Firefox.app with error -10810.ao tentar open -a Firefox: - |
Jari Keinänen
@koiyu Trysudo open -na Firefox
daviesgeek
ele falha como acima: - / (também usando o caminho para o executável do unix falha, embora de forma diferente.) #
318 Jari Keinänen
11
Os processos iniciados a partir de uma sessão SSH não têm acesso à GUI. Se isso funcionar no seu sistema, suspeito que você tenha alterado alguma configuração de baixo nível em algum momento.
Tobias
11
@daviesgeek, mas você fez o SSH em um usuário que não seja aquele que atualmente possui a GUI, como o OP queria.
Tobias