¿Cómo puedo iniciar un process de daemon como usuario especificado al inicio sin un inicio de session interactivo?

Intento configurar un agente de compilation de TeamCity en un mini server Mac con 10.7.3. Lo he logrado ejecutar y build exitosamente, pero solo si inicio session y lanzo el process manualmente.

Preferimos que el process se inicie al inicio, lo que parece hacerse fácilmente colocando un file plist en la carpeta / Library / LaunchDaemon. Lamentablemente, esto no funciona para nosotros ya que el process se activa como root en lugar de como nuestro usuario especificado. Realmente preferiríamos mantener las cosas restringidas a la carpeta del usuario y, además, necesitamos acceso a un llavero para manejar la mecánica de firma de código de iOS. Desafortunadamente, usar ~ / Library / LaunchAgents no funciona, ya que parece requerir que alguien visite el terminal e inicie session; esto debe comenzar desde el arranque y mantenerse en funcionamiento cuando el usuario cierre la session.

¿Hay alguna manera de iniciar un process como un usuario especificado en el arranque?

Usted puede ejecutar fácilmente como otro usuario con sudo -u así:

 #!/bin/sh UZER=jsmith sudo -u "$UZER" /path/to/program/you/want/to/run exit 0 

Simplemente cambie 'jsmith' al nombre de usuario corto apropiado, y luego guárdelo como un script en alguna parte, y llame desde / Library / LaunchDaemons

Recuerde que todos los files en / Library / LaunchDaemons deben ser propiedad de la raíz para ejecutar.

(Creo que esto es lo que bmike estaba sugiriendo)

Otra opción

Sin embargo, escribí un CÓMO para hacer que el inicio de session automático sea más seguro:

Terminally Geeky: utiliza el inicio de session automático de forma más segura

El resumen ejecutivo es este:

  • Encienda el inicio de session automático
  • Ponga esta list de lanzamiento en ~ / Library / LaunchAgent
  • Reiniciar

Que hace:

Tan pronto como inicie session, launchd lo llevará nuevamente a la pantalla de inicio de session usando:

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

Tenga en count que es toda una larga línea.

Considerando que alguien con acceso físico a su computadora tiene muchos exploits potenciales, lo considero relativamente seguro, pero por supuesto, todos tienen que tomar su propia determinación. Corro esto en mi pequeña oficina, pero mi iMac está en mi oficina privada, que puedo cerrar cuando no estoy allí.

También tenga en count que el inicio de session automático no funciona con FileVault 2 .

La manera más fácil es configurar a ese usuario para que inicie session automáticamente y luego bloquee la pantalla con el cambio rápido de usuario habilitado. De lo contrario, tendrá que hacer el arduo trabajo de crear un usuario de nivel de administrador y hacer que su secuencia de commands o process se lance a sí mismo con un usuario específico.

Los processs iniciados antes de que se inicie la session de inicio de session de usuario son funcionalmente root y deben degradarse a sí mismos si no desea que se ejecuten como root. Apple hace esto con el server web y el usuario _www y en el lado del cliente, algunos processs se ejecutan como usuarios nobody, _spotlight y, _mdnsresponder.