Come eseguire AppleScript (.scpt) come LaucnDaemon per root

2

Ho un AppleScript o un set di Applescripts che sto cercando di eseguire come LaunchDaemon. Non ho problemi nell'esecuzione di LaunchDaemon con il mio utente. Il problema arriva quando ho la necessità di leggere un file che è leggibile solo da root, questo è di progettazione per ragioni di sicurezza in quanto il file contiene informazioni sensibili.

Ho installato i file AppleScript precompilati necessari, i file .scpt, in:

/Library/Scripts/myApplication/

Ho inserito i miei dati in:

/Library/LaunchDaemons

Modifica Ecco il plist per il mio demone:

<?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>

Ora, quando provo a caricare i plists usando launchctl e sudo

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

Ottengo errori nel filelog.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.

Tuttavia, se lascio "sudo" dal comando launchctl, funziona perfettamente. Ho anche provato a eseguire gli script dal terminale come utente root, che funziona anche bene. Tuttavia, non appena provo a caricarli con launchctl e sudo tutto muore.

Per poter eseguire questo script in precedenza, dovevo concedere all'applicazione l'esecuzione dei privilegi di accessibilità dello script sulla macchina, quindi in precedenza Sublime Text 2, Terminal e Script Editor. Immagino che questo sia ciò che sta causando la mancata esecuzione dello script, ma non so quale programma abilitare sotto accessibilità, dal momento che non viene richiesto. Quindi, come faccio a far funzionare questo script nel modo in cui ne ho bisogno?

    
posta bobthemagicman 27.08.2015 - 03:27
fonte

1 risposta

0

Supponendo che il tuo lavoro di avvio sia impostato correttamente, potresti raggiungere una limitazione di AppleScript.

AppleScript richiede una GUI (Aqua Session)

Se AppleScript viene avviato utilizzando launchd come processo root utente, non avrà un interfaccia utente grafica associata . La maggior parte di AppleScript richiede un'interfaccia utente grafica per funzionare in modo coerente. A seconda della versione di OS X, potrebbe funzionare, ma non è progettato per.

I processi su OS X non possono incrociare banalmente tra le sessioni utente .

Do Shell Script

Un approccio più robusto consiste nel separare le funzionalità che richiedono privilegi più elevati in uno script di shell come bash, perl, ruby o python.

Il tuo AppleScript può quindi chiamare quello script usando script di shell di AppleScript. :

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

Se è necessario evitare l'incorporamento di nome utente e password, questo è possibile ma va oltre lo scopo di questa domanda.

    
risposta data 28.09.2015 - 11:48
fonte

Leggi altre domande sui tag