3 votes

Comment lancer un processus démon en tant qu'utilisateur spécifié au démarrage sans connexion interactive ?

J'essaie de mettre en place un agent de construction TeamCity sur un serveur Mac Mini fonctionnant sous 10.7.3. J'ai réussi à le faire fonctionner et à le construire, mais seulement si je me connecte et lance le processus manuellement.

Nous préférerions que le processus soit lancé au démarrage, ce qui semble être facilement réalisable en plaçant un fichier plist dans le dossier /Library/LaunchDaemon. Malheureusement, cela ne fonctionne pas pour nous car le processus démarre en tant que Root et non en tant qu'utilisateur spécifié. Nous préférerions vraiment que les choses restent limitées au dossier de l'utilisateur et, de plus, nous avons besoin d'un accès à un trousseau de clés pour gérer la mécanique de signature du code iOS. Malheureusement, l'utilisation de ~/Library/LaunchAgents ne fonctionne pas car cela semble nécessiter que quelqu'un se rende dans le terminal et se connecte - ce processus doit être lancé au démarrage et rester actif lorsque l'utilisateur est déconnecté.

Existe-t-il un moyen de lancer un processus en tant qu'utilisateur spécifié au démarrage ?

1voto

moodforaday Points 2633

Vous pouvez facilement vous exécuter en tant qu'autre utilisateur avec sudo -u comme suit :

#!/bin/sh

UZER=jsmith

sudo -u "$UZER" /path/to/program/you/want/to/run

exit 0

Remplacez simplement 'jsmith' par le nom d'utilisateur court approprié, puis sauvegardez-le en tant que script quelque part, et appelez-le à partir de /Library/LaunchDaemons.

N'oubliez pas que tous les fichiers contenus dans /Library/LaunchDaemons doivent appartenir à Root pour pouvoir être exécutés.

(Je pense que c'est ce que bmike suggérait)

Une autre option

Cependant, j'ai écrit un HOWTO pour rendre l'auto-login plus sûr :

Terminally Geeky : utiliser le login automatique de manière plus sécurisée

Le résumé est le suivant :

  • Activer la connexion automatique
  • Mettez ceci launchd plist dans ~/Bibliothèque/LaunchAgents
  • Reboot

Ce qu'il fait :

Dès que vous vous connectez, launchd vous renvoie à l'écran de connexion en utilisant :

"/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession" -suspend

Notez qu'il s'agit d'une seule et même ligne.

Si l'on considère qu'une personne ayant un accès physique à votre ordinateur dispose d'une lot d'exploits potentiels, je considère que c'est relativement sûr, mais bien sûr, chacun doit faire sa propre évaluation. Je l'utilise dans mon petit bureau, mais mon iMac se trouve dans mon bureau privé que je peux verrouiller lorsque je n'y suis pas.

Notez également que la connexion automatique ne fonctionne pas avec la fonction FileVault 2 .

0voto

Oskar Points 1242

La solution la plus simple consiste à configurer cet utilisateur pour qu'il se connecte automatiquement, puis à verrouiller l'écran en activant la fonction de changement rapide d'utilisateur. Sinon, vous devrez créer un utilisateur de niveau administrateur et faire en sorte que votre script ou votre processus se lance avec un utilisateur spécifique.

Les processus lancés avant le début de la session de connexion de l'utilisateur sont fonctionnellement Root et doivent se rétrograder si vous ne voulez pas qu'ils s'exécutent en tant que Root. Apple le fait avec le serveur web et l'utilisateur _www et du côté client, certains processus s'exécutent en tant qu'utilisateurs nobody, _spotlight et , _mdnsresponder.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X