Perché visualizzo un errore di "dubbia proprietà del file" quando Launch Agent esegue il mio file .plist?


54

Ho un agente di avvio configurato per l'esecuzione di un file .plist ad esempio: /Library/LaunchAgent/foo.plist. All'interno di questo .plist, è impostato per essere eseguito durante LoginWindowe Aqua.

Quando provo ad avviare il mio computer e accedo alla schermata di accesso, dovrebbe essere eseguito questo plist ma invece viene visualizzato il seguente errore (nella console):

launchctl: Proprietà dubbia sul file (saltando): /Library/LaunchAgents/foo.plist

Quando provo ad accedere a un account non amministratore, viene visualizzato esattamente lo stesso messaggio di errore. Quando provo ad accedere con un account amministratore, funziona bene.

Sarò onesto, non so molto sui privilegi e le autorizzazioni di Mac OS X.

Per creare il file, l'ho aperto in emacs, con sudol'account admin (ad es. Usando il sucomando poiché l'altro account non ha i privilegi di sudo) e poi l'ho salvato.

Quale account devo utilizzare per creare il file in modo che funzioni per tutti gli utenti?
Devo usare il comando sudo?
Devo modificare le autorizzazioni del file (ad es. Uso chmod)?
C'è un modo semplice per prendere un file esistente e cambiarne la proprietà invece di dover ricreare il file?
Qualcuno potrebbe spiegare perché si verifica questo errore?


Cosa offre ls -l per /Library/LaunchAgent/foo.plist
user151019

1
@Mark: dà il seguente:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful

È anche possibile forzare il caricamento ( -F).
Kenorb,

Risposte:


51

Se un plist è di proprietà di root e scrivibile da un utente diverso da root, questo è un problema di sicurezza.

Puoi cambiare il proprietario con root sudo chown root <filename>e cambiare i permessi con sudo chmod 644 <filename>(4 per l'accesso in lettura, 2 per l'accesso in scrittura, 1 per l'accesso in esecuzione, sommato. Il primo numero è per il proprietario, il secondo per il gruppo, il terzo per tutti.)


Questo funziona Sono solo confuso sul perché ho dovuto cambiare il proprietario in root però. È l'utente root utilizzato per LaunchAgents?
Senso

1
Penso di sì.
Michiel de Mare,

1
So che questo è un post più vecchio, ma questa è un'ottima risposta! Ho cambiato le autorizzazioni su /system/library/launchdaemons/com.apple.mdnsresponder per provare una correzione che Apple ha raccomandato, ma otterrei l'errore sopra menzionato quando provo a caricarlo in seguito. La modifica del proprietario e delle autorizzazioni come descritto sopra era l'unico modo per riavere la mia connessione Internet. Grazie!

Di fronte lo stesso adesso e risolto. Ho pensato che il proprietario del file invocasse molto launchctl. Ho creato il file come il mio normale utente e lo stavo eseguendo sudo. Da qui l'errore. Poiché root non è il proprietario del file, No sudonon era necessario. Ho corso senza sudoe ha funzionato bene.
Bibhas

14

Dalla descrizione manpage launchctl (1) del loadsottocomando:

Si noti che i file di configurazione per utente (LaunchAgents) devono essere di proprietà dell'utente che li carica. Tutti i daemon di sistema (LaunchDaemons) devono essere di proprietà di root. I file di configurazione non devono essere scrivibili in gruppo o nel mondo. Queste restrizioni sono in vigore per motivi di sicurezza, in quanto la possibilità di scrivere su un file di configurazione launchd consente di specificare quale eseguibile verrà avviato.

launchctl ha diversi messaggi "Dubious ...". Il launchd codice per 10.6.7 (per esempio) ha tre di questi messaggi nella sua launchctl.c(vedere la funzione path_goodness_check).

  1. Dubious permissions on file (skipping): <pathname>
  2. Dubious ownership on file (skipping): <pathname>
  3. Dubious path. Not a regular file or directory (skipping): <pathname>

Per evitare questi messaggi un percorso deve essere (# 3) un normale file o directory 1 (o un collegamento simbolico a uno) che è (# 1) di proprietà di root o dell'utente che invoca e (# 2) non "gruppo" o "altro "Scrivibile (es chmod go-w.).

1 Nessuna pipe denominata, nodi dispositivo speciale blocco / carattere, socket di dominio locale, ecc.


Il tuo file è probabilmente di proprietà dell'utente amministratore poiché dici che non ricevi il messaggio quando accedi come quell'utente (il percorso è di proprietà dell'utente che invoca in quel caso).
Per far funzionare il percorso per altri utenti, dovrebbe essere di proprietà di root.

Per organizzare questo, fai:

sudo chown root /Library/LaunchAgent/foo.plist

1

Grazie per la risposta (cambiando proprietario in root) - questo è tutto ciò di cui avevo bisogno.

Per renderlo un po 'più che un post' anch'io '... Sono arrivato qui attraverso un percorso contorto: stavo ottenendo errori "Questa API può essere utilizzata solo da un processo in esecuzione all'interno di una sessione Aqua" per un launchdaemon. La ricerca di una risposta mi ha portato al technote di Apple su demoni e agenti che ha spiegato come risolvere l'errore "Aqua session", ma che mi ha lasciato problemi di "dubbia proprietà". È così che sono arrivato qui, dove il mio problema finale è stato risolto.

Forse aggiungendo tutto ciò a questa discussione, alcuni motori di ricerca collegheranno questa pagina a uno dei problemi precursori, risparmiando così qualche avventuriero futuro un po 'di tempo.


Nota, questo dovrebbe essere un commento piuttosto che una risposta.
Studgeek

1
Avrei commentato, ma i miei punti reputazione non erano abbastanza alti. (Non sembra al contrario che si possa "rispondere" con una bassa reputazione ma non commentare?)
Matt Strange

-2

per il file in ~ / Library / LaunchAgent di proprietà dell'utente e non root non sudo, se devi cambiare la proprietà dal momento che lo stai caricando dall'utente root


-3

Questo è ciò che accade quando le persone non sanno come sudofunziona. Per disabilitare i servizi che si trovano su file di proprietà dell'utente, basta chiamare launchtlsenza sudo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.