Puis-je démarrer une application en tant qu'autre utilisateur sans changer réellement d'utilisateur?

17

Existe-t-il un moyen de démarrer une application en tant qu'un autre utilisateur afin que l'application démarrée utilise les préférences / l'historique / les ressources de l'autre utilisateur et autres?

Par exemple: je me suis connecté en tant qu'Alice et je voudrais démarrer Firefox en tant que Bob, donc Firefox afficherait l'historique de navigation de Bob au lieu d'Alice.

j'ai essayé

$ su Bob
$ open -a Firefox

Mais sans effet apparent; en fait, le moniteur d'activité montre que le processus Firefox est exécuté par Alice, pas Bob.

Je comprends que j'aurai besoin des informations de connexion de Bob, mais ce n'est pas un problème.

Jari Keinänen
la source

Réponses:

16

Depuis la ligne de commande, vous devez trouver l'exécutable Unix et l'exécuter en utilisant sudo comme ceci:

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

… Ou la même chose avec su: (mais cela nécessite également que vous configuriez un mot de passe pour root - ce que je ne recommande pas)

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

(… Ou ce qui précède sur une seule ligne :)

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

Dans le passé, le moyen le plus simple pour les Mac PPC était d'utiliser Pseudo , mais il a longtemps été abandonné . Il s'agit de déposer l'icône de l'application sur l'icône ou la fenêtre de Pseudo.

user151019
la source
Ah, la clé était de trouver l'exécutable Unix. Cela fonctionne aussi avec susi on ne veut pas sudo. Merci!
Jari Keinänen
Hmm, lorsque j'essaie d'exécuter Google Chrome, j'obtiens ceci:Trace/BPT trap: 5
Wojciech Bednarski
Lorsque sudoj'utilise l' approche, j'obtiens des échecs de connexion même si j'utilise le mot de passe correct pour l'autre utilisateur. sufonctionne d'autre part (pas de mot de passe pour le jeu de racines)
LapplandsCohan
@lapplandscohan sudo prend le mot de passe de l'utilisateur actuel
user151019
1
@ evan.bovie YTes montre qu'ils ont pensé à la sécurité
user151019
4

Voir /apple//a/102105/1860 pour savoir pourquoi sune fonctionne pas pour toutes les applications.

launchd's bsexec

Les versions récentes launchdont la possibilité de lancer des applications dans la session d'un autre utilisateur; bien que les ingénieurs d'Apple n'aient pas recommandé son utilisation générale.

Utilisez l' bsexecoption dans launchctl pour cibler la session utilisateur appropriée:

 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.

L'approche recommandée consiste à écrire un ticket de travail launchd et à redémarrer le Mac - ou à demander à l'utilisateur de se déconnecter et de se reconnecter.

Graham Miln
la source
0

Vous devez ssh. C'est à dire ssh [email protected]. Comme vous l'avez dit, vous aurez besoin du mot de passe de l'utilisateur. Ensuite, vous pouvez faire ce que vous demandez. Vous devrez activer la connexion à distance sous Préférences système> Partage:
Préférence de connexion à distance
Ensuite, vous pouvez simplement le faire open -a Firefoxet Firefox s'ouvrira en tant qu'autre utilisateur, pas le vôtre.

daviesgeek
la source
Malheureusement, j'obtiens: LSOpenURLsWithRole() failed for the application /Applications/Firefox.app with error -10810.en essayant open -a Firefox: - |
Jari Keinänen
@koiyu Trysudo open -na Firefox
daviesgeek
il échoue comme ci-dessus: - / (l'utilisation du chemin vers l'exécutable unix échoue, bien que différemment.)
Jari Keinänen
1
Les processus démarrés à partir d'une session SSH n'ont pas accès à l'interface graphique. Si cela fonctionne sur votre système, je soupçonne que vous avez modifié une configuration de bas niveau à un moment donné.
Tobias
1
@daviesgeek mais avez-vous SSH dans un utilisateur autre que celui qui a actuellement l'interface graphique, comme l'OP le voulait.
Tobias