15 votes

Comment lancer un processus en tant qu'utilisateur spécifique au démarrage sous OS X ?

Je voudrais exécuter un script en tant qu'utilisateur particulier au démarrage (pas à la connexion). Je pensais qu'un launchd LaunchDaemon le ferait, mais 'man launchd' dit :

"Si vous souhaitez que votre service s'exécute en tant qu'utilisateur, dans l'environnement de cet utilisateur, en faire un agent launchd est le SEUL moyen supporté pour y parvenir sous Mac OS X. En d'autres termes, il n'est pas suffisant d'exécuter un setuid(2) pour devenir un utilisateur au sens propre sous Mac OS X".

Ils ne plaisantent pas - lorsque j'essaie d'exécuter mon script en tant que LaunchDaemon, cela ne fonctionne pas. En particulier, j'essaie d'automatiser certaines opérations de trousseau de clés en utilisant la commande 'security', et il ne me laisse pas changer le trousseau de clés par défaut lorsque j'exécute le script via LaunchDaemon, bien que le script fonctionne bien lorsqu'il est exécuté en utilisant sudo à partir d'un script.

Un LaunchAgent ne fonctionnera pas, car le but est que le processus s'exécute sans qu'un utilisateur se connecte et les LaunchAgents ne s'exécutent que lorsque quelqu'un se connecte. J'ai regardé cron et la directive @reboot et cela semble prometteur, mais j'ai lu que cron est déprécié sous OSX.

15voto

Mark Cheverton Points 221

J'ai eu des problèmes similaires en essayant de faire en sorte qu'un processus en cours d'exécution utilise un trousseau de clés par défaut. Essentiellement, LaunchAgent ne semble pas fonctionner dans un environnement de connexion complet pour exécuter les commandes de sécurité, de sorte que le changement de trousseau par défaut ne fonctionne pas et revient avec une erreur de permissions sur la page d'accueil. /Library/Preferences/ répertoire.

La sauce secrète consiste à ajouter :

<key>SessionCreate</key>
<true/>

à votre plist. Il s'agit d'une fonctionnalité non documentée qui forcera un environnement correct et vous permettra de définir le trousseau par défaut. Crédit pour joensson en cette question pour m'avoir indiqué la bonne direction.

1 votes

Si je modifie mon org.apache.httpd.plist pour inclure ceci, cela ne prendra effet que lorsque le système sera redémarré, n'est-ce pas ? Je ne peux pas simplement redémarrer Apache moi-même pour le faire ?

1 votes

C'est la pièce qui me manquait pour disposer du porte-clés nécessaire. MAIS AUSSI a dû faire une redémarrage parce qu'un launchctl unload y luego launchctl load n'était pas suffisante. Un redémarrage complet était nécessaire.

6voto

Bruno Points 141

Sauvegarder en tant que démon global ( /Library/LaunchDaemons ) et spécifier l'utilisateur avec la clé UserName :

<key>UserName</key>
<string>Put username here</string>

1 votes

Cette réponse devrait être la bonne à partir d'aujourd'hui. Je vous remercie de votre attention.

1voto

Handyman5 Points 5087

Il y a un certain nombre d'autres endroits où vous pouvez masquer les éléments de démarrage dans OS X (dont la plupart ne sont absolument pas pris en charge). J'essaierais /etc/rc.local Je me souviens que cela fonctionnait dans Panther, il est donc possible que cela fonctionne encore aujourd'hui.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X