Cómo ejecutar AppleScript (.scpt) como LaucnDaemon por root

1

Tengo un AppleScript o un conjunto de Applescripts que estoy intentando ejecutar como LaunchDaemon. No tengo ningún problema para ejecutar LaunchDaemon con mi usuario. El problema surge cuando tengo la necesidad de leer un archivo que solo se puede leer por root, esto es por diseño por razones de seguridad ya que el archivo contiene información confidencial.

He instalado los archivos de AppleScript precompilados necesarios, los archivos .scpt, en:

/Library/Scripts/myApplication/

He puesto mis plistas en:

/Library/LaunchDaemons

Editar: Aquí está la lista para mi Daemon:

<?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.mycompany.myapp.service</string>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/osascript</string>
      <string>/Library/Scripts/myApp/myApp.scpt</string>
    </array>
</dict>

Ahora, cuando intento cargar las listas usando launchctl y sudo

sudo launchctl load -w /Library/LaunchDaemons/com.mycompany.myapp.service.plist

Recibo errores en systemlog.log:

Aug 26 17:54:13 computername com.apple.xpc.launchd[1] (com.mycompany.myapp.service[74757]): Service exited with abnormal code: 1
Aug 26 17:54:13 computername com.apple.xpc.launchd[1] (com.mycompany.myapp.service): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.

Sin embargo, si suelto el "sudo" del comando launchctl, funciona perfectamente. Incluso he intentado ejecutar los scripts desde el terminal como usuario root, lo que también funciona bien. Sin embargo, tan pronto como intente cargarlos con launchctl y sudo, todo muere.

Para que esta secuencia de comandos se ejecutara previamente, tuve que otorgarle a la aplicación que ejecuta los privilegios de accesibilidad de la secuencia de comandos en la máquina, por lo que anteriormente, Sublime Text 2, Terminal y Script Editor. Supongo que esto es lo que hace que el script no se ejecute, pero no sé qué programa habilitar con accesibilidad, ya que no se me solicita. Entonces, ¿cómo puedo hacer que este script se ejecute de la forma en que lo necesito?

    
pregunta bobthemagicman 27.08.2015 - 03:27

1 respuesta

0

Suponiendo que su trabajo launchd esté correctamente configurado, es posible que esté llegando a una limitación de AppleScript.

AppleScript requiere una GUI (sesión Aqua)

Si su AppleScript se inicia utilizando launchd como usuario root process, no tendrá un interfaz gráfica de usuario asociada . La mayoría de AppleScript requiere una interfaz gráfica de usuario para funcionar de manera consistente. Dependiendo de la versión de OS X, puede funcionar, pero no está diseñado para hacerlo.

Los procesos en OS X no pueden cruzarse de manera trivial entre sesiones de usuario .

Hacer script de shell

Un enfoque más sólido es separar la funcionalidad que necesita mayores privilegios en un script de shell como bash, perl, ruby o python.

Tu AppleScript puede luego llamar a ese script usando do shell script de AppleScript :

do shell script "command" user name "me" password "mypassword" with administrator privileges

Si necesita evitar la incorporación de un nombre de usuario y una contraseña, esto es posible pero está fuera del alcance de esta pregunta.

    
respondido por el Graham Miln 28.09.2015 - 11:48

Lea otras preguntas en las etiquetas