Pourquoi est-ce que je reçois une erreur de «propriété douteuse du fichier» lorsque Launch Agent exécute mon fichier .plist?

54

J'ai un agent de lancement configuré pour exécuter un fichier .plist par exemple: /Library/LaunchAgent/foo.plist. Dans cette liste, il est configuré pour s'exécuter pendant LoginWindowet Aqua.

Lorsque j'essaie de lancer mon ordinateur et d'accéder à l'écran de connexion, ce plist doit s'exécuter, mais génère plutôt l'erreur suivante (dans la console):

launchctl: propriété douteuse sur fichier (sautant): /Library/LaunchAgents/foo.plist

Lorsque je tente de me connecter à un compte non-administrateur, le même message d'erreur est affiché. Lorsque je tente de me connecter avec un compte administrateur, cela fonctionne correctement.

Soyons honnêtes, je ne connais pas grand chose aux privilèges et autorisations de Mac OS X.

Pour créer le fichier, je l'ai ouvert dans emacs, avec sudole compte administrateur (par exemple, en utilisant la sucommande car l'autre compte ne dispose pas des privilèges sudo), puis je l'ai sauvegardé.

Quel compte dois-je utiliser pour créer le fichier afin qu'il fonctionne pour tous les utilisateurs?
Dois-je utiliser la commande sudo?
Dois-je modifier les autorisations de fichiers (par exemple, utiliser chmod)?
Existe-t-il un moyen simple de récupérer un fichier existant et de changer son propriétaire au lieu de le recréer?
Quelqu'un pourrait-il s'il vous plaît expliquer pourquoi cette erreur se produit?

Sensé
la source
Que donne ls -l pour /Library/LaunchAgent/foo.plist
user151019
1
@Mark: cela donne:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful
Il est également possible de forcer le chargement ( -F).
Kenorb

Réponses:

51

Si un plist appartient à root et est accessible en écriture à un utilisateur autre que root, c'est un problème de sécurité.

Vous pouvez modifier le propriétaire en root avec sudo chown root <filename>, et modifier les autorisations avec sudo chmod 644 <filename>(4 pour l'accès en lecture, 2 pour l'accès en écriture, 1 pour l'accès d'exécution, additionnées. Le premier numéro est pour le propriétaire, le second pour le groupe, le troisième pour toutes les personnes.)

Michiel de Mare
la source
Cela marche. Je suis juste confus quant à la raison pour laquelle j'ai dû changer le propriétaire en root. L'utilisateur root est-il utilisé pour LaunchAgents?
Sensé
1
Oui, je le pense
Michiel de Mare
1
Je sais que c'est un article plus ancien, mais c'est une excellente réponse! J'ai modifié les autorisations sur /system/library/launchdaemons/com.apple.mdnsresponder pour essayer un correctif recommandé par Apple, mais l'erreur suivante apparaît lorsque je tente de le charger. Changer le propriétaire et les permissions comme décrit ci-dessus était le seul moyen de récupérer ma connexion Internet. Merci!
Face à la même chose maintenant et résolu. Je pensais que le propriétaire du fichier invoquait beaucoup launchctl. J'ai créé le fichier en tant qu'utilisateur normal et m'exécutais avec sudo. D'où l'erreur. Parce que root n’est pas le propriétaire du fichier, No sudon’a pas été nécessaire. J'ai couru sans sudoet ça a bien fonctionné.
Bibhas
14

Dans la description de la sous - commande de la page de manuel launchctl (1)load :

Notez que les fichiers de configuration par utilisateur (LaunchAgents) doivent appartenir à l'utilisateur qui les charge. Tous les démons du système (LaunchDaemons) doivent appartenir à root. Les fichiers de configuration ne doivent pas être en écriture de groupe ou en écriture. Ces restrictions sont en place pour des raisons de sécurité, car autoriser l'écriture sur un fichier de configuration launchd permet de spécifier quel exécutable sera lancé.

launchctl a plusieurs messages «Dubious…». Le code launchd pour 10.6.7 (par exemple) contient trois messages de ce type launchctl.c(voir la fonction 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>

Pour éviter ces messages, un nom de chemin doit être (# 3) un fichier ou un répertoire normal 1 (ou un lien symbolique vers un) qui est (# 1) détenu par root ou l'utilisateur invoquant et (# 2) ne pas être "groupe" ou "autre ”Inscriptible (ie chmod go-w).

1 Aucun canal nommé, nœud de périphérique spécial bloc / caractère, sockets de domaine local, etc.


Votre fichier appartient probablement à l'utilisateur admin puisque vous dites que vous ne recevez pas le message lorsque vous vous connectez en tant qu'utilisateur (le nom du chemin appartient à l'utilisateur invoquant dans ce cas).
Pour que le chemin d'accès fonctionne pour d'autres utilisateurs, il doit appartenir à root.

Pour organiser cela, faites:

sudo chown root /Library/LaunchAgent/foo.plist
Chris Johnsen
la source
1

Merci pour la réponse (changement de propriétaire en racine) - c'est tout ce dont j'avais besoin.

Pour en faire un peu plus qu'un message "moi aussi" ... Je suis arrivé ici via un chemin compliqué: je recevais les erreurs "Cette API ne peut être utilisée que par un processus exécuté dans une session Aqua" pour un launchdaemon. La recherche d'une réponse à cette question m'a conduit à la note technique d' Apple sur les démons et les agents, qui expliquait comment résoudre l'erreur "Aqua session", mais cela me laissait avec des problèmes de "propriété douteuse". C'est comme ça que je suis arrivé ici, où mon dernier problème a été résolu.

Peut-être que l'ajout de tout cela à cette discussion amènera un moteur de recherche à associer cette page à l'un des problèmes précurseurs, permettant ainsi à un futur aventurier de gagner du temps.

Matt Strange
la source
Notez que cela devrait être un commentaire plutôt qu'une réponse.
studgeek
1
J'aurais commenté, mais mes points de réputation n'étaient pas assez élevés. (Est-ce qu'il ne semble pas que l'on puisse "répondre" avec une réputation basse mais pas de commentaire?)
Matt Strange Le
-2

pour un fichier dans ~ / Library / LaunchAgent appartenant à l'utilisateur et non à la racine ne sont pas sudo, si vous devez en changer le propriétaire car vous le chargez à partir de l'utilisateur root

radha
la source
-3

C'est ce qui arrive quand les gens ne savent pas comment ça sudomarche. Pour désactiver les services sur les fichiers appartenant à votre utilisateur, appelez simplement launchtlsans sudo.

Maximo Pech
la source