¿Cómo hago para que mi LaunchAgent se ejecute como root?

Quiero ejecutar un process como root en el inicio de session del usuario.

/System/Library/LaunchAgents/eXist.plist con /System/Library/LaunchAgents/eXist.plist rx—r—r— :

  • ¿Llamadas FaceTime solo desde Contactos?
  • ¿Cuál es el elemento del llavero EscrowService?
  • La actualización / installation de iMovie 10.0.1 falla con el post "Ha ocurrido un error"
  • habilidad -KILL -u $ usuario ¿Comando en Max OS X?
  • ¿Hay alguna manera de desactivar el apagado automático desde la pantalla de inicio de session cuando ningún usuario está conectado?
  • ¿Hay alguna razón por la cual OS X Mavericks Server ejecuta Postgresql?
  •  <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>GroupName</key> <string>wheel</string> <key>Label</key> <string>eXist DB</string> <key>Program</key> <string>/Applications/eXist-db/bin/startup.sh</string> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/eXist DB.err</string> <key>StandardOutPath</key> <string>/tmp/eXist DB.out</string> <key>UserName</key> <string>root</string> </dict> </plist> 

    Sin embargo, mi process continúa ejecutándose como mi usuario davea lugar de root. ¿Alguna idea de qué más tengo que hacer?

    Estoy usando Mac 10.9.1.

  • Después de la actualización de Mavericks, la fuente de Chrome es terrible
  • ¿Fusionando dos sistemas?
  • ¿Hay alguna manera de hacer que las teclas de function actúen como teclas estándar con un keyboard Logitech K811?
  • ¿Por qué puedo configurar VLC como mi browser pnetworkingeterminado?
  • ¿El sistema operativo actualizado de Snow Leopard a Mavericks borrará otras particiones?
  • Apple Mail solo envía una count
  • 6 Solutions collect form web for “¿Cómo hago para que mi LaunchAgent se ejecute como root?”

    Para hacer que un usuario LaunchAgent ejecute una secuencia de commands para ejecutar como root, debe hacer lo siguiente:

    Modificar los permissions del script Agregue la secuencia de commands (o command) al file sudoers en el context del usuario y, finalmente, agregue y cargue un plist agente de lanzamiento adecuado.

    ¡Este enfoque podría crear graves agujeros de security!


    En el siguiente ejemplo, uso el file startup.sh de eXit-db 2.2:

    • Crea un plist:

       <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>Label</key> <string>org.eXist_DB</string> <key>ProgramArguments</key> <array> <string>/usr/bin/sudo</string> <string>/Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/eXist_DB.err</string> <key>StandardOutPath</key> <string>/tmp/eXist_DB.out</string> <key>ThrottleInterval</key> <integer>10</integer> </dict> </plist> 

      y guárdalo como org.eXist_DB.plist en ~ / Library / LaunchAgents

      La última key:

        <key>ThrottleInterval</key> <integer>10</integer> 

      podría no ser necesario. En mi máquina virtual fue, por razones desconocidas.

    • Modificar los permissions de startup.sh:

       sudo chown root /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh sudo chmod 4755 /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh 
    • Modificar el file sudoers:

       sudo visudo 
    • agregue una línea para habilitar la ejecución de un command sin la necesidad de ingresar la contraseña de sudo

       # User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL 

      ->

       # User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL your_user_name ALL=(ALL) NOPASSWD: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh 
    • Finalmente ingrese:

       launchctl load -w ~/Library/LaunchAgents/org.eXist_DB.plist 

      cargar e iniciar el agente de inicio

    Use un inicio de session. Están en desuso, pero aún funcionan:

    Mac OS X: creación de un enlace de inicio de session

    Agregue el par de valores key para UserName :

     <key>UserName</key> <string>root</string> 

    Coloque el ticket de trabajo de launchd en /Library/LaunchDaemons/ ; la carpeta /System está reservada exclusivamente para el uso de Apple.

    Para ejecutar como el usuario especificado, asegúrese de colocar el ticket de trabajo en LaunchDaemons . Como @Manu menciona en el comentario siguiente, la key UserName se ignora para trabajos en LaunchAgents .

    Puede usar launchd-oneshot para instalar un trabajo de inicio de session ejecutado como root con

     brew install cybertk/formulae/launchd-oneshot sudo launchd-oneshot <script> --on-login-as-root 
    • No te metas con nada en /System/ less que quieras arriesgar a atornillar tu sistema. Seriamente. Mantente alejado.

    • Ponlo en /Library/LaunchDaemons/ lugar.

    La creación de un LaunchAgent que se ejecuta con privilegios sudo / root se puede hacer simplemente teniendo sudo el command que ejecuta LaunchAgent.

    Crear file PList

    Intenta colocar este ejemplo mínimo en ~/Library/LaunchAgents/com.sudoexample.plist

     <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.sudoexample</string> <key>ProgramArguments</key> <array> <string>sudo</string> <string>touch</string> <string>/tmp/sudoexample</string> </array> <key>RunAtLoad</key> <true/> <key>StandardOutPath</key> <string>/tmp/sudoexample.log</string> <key>StandardErrorPath</key> <string>/tmp/sudoexample.log</string> </dict> </plist> 

    Nota: los agentes suelen tener la propiedad del file de usuario, pero root propiedad root parece funcionar bien.

    El ejemplo anterior ejecuta sudo touch /tmp/sudoexample y registra la salida en /tmp/sudoexample.log .

    Si ejecuta launchctl load ~/Library/LaunchAgents/com.sudoexample.plist en este punto, fallará porque sudo intentará solicitar una contraseña y launchctl no tiene ningún tty asociado para launchctl la request de contraseña:

     $ ls /tmp/ sudoexample.log $ cat /tmp/sudoexample.log sudo: no tty present and no askpass program specified 

    Permitir privilegios elevados

    Necesitamos otorgarle permiso a su usuario para ejecutar sudo touch sin una contraseña.

    Esto se puede hacer así:

    echo "$(whoami) ALL=(ALL) NOPASSWD: $(which touch)" | sudo tee /etc/sudoers.d/touch

    Cuando hayas terminado, el file debería verse más o less así:

     $ sudo cat /etc/sudoers.d/touch coryklein ALL=(ALL) NOPASSWD: /usr/bin/touch 

    Pruébalo

     $ launchctl load ~/Library/LaunchAgents/com.sudoexample.plist $ ls -l /tmp total 0 -rw-r--r-- 1 root wheel 0 Jun 29 14:01 sudoexample -rw-r--r-- 1 coryklein wheel 0 Jun 29 14:01 sudoexample.log 

    Ahora puede ver que LaunchAgent se ejecutó exitosamente al crear la raíz poseída /tmp/sudoexample .

    Gracias a la respuesta de Klanomath por proporcionar la base para esta.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).