¿Por qué recibo un error de "propiedad dudosa del archivo" cuando Launch Agent ejecuta mi archivo .plist?

Tengo un agente de lanzamiento configurado para ejecutar un archivo .plist, por ejemplo: /Library/LaunchAgent/foo.plist. Dentro de este .plist, está configurado para ejecutarse durante LoginWindowy Aqua.

Cuando intento iniciar mi computadora y llegar a la pantalla de inicio de sesión, este plist debería ejecutarse, pero en su lugar da el siguiente error (en la consola):

launchctl: propiedad dudosa en el archivo (omitiendo): /Library/LaunchAgents/foo.plist

Cuando intento iniciar sesión en una cuenta que no es de administrador, aparece exactamente el mismo mensaje de error. Cuando intento iniciar sesión con una cuenta de administrador, funciona bien.

Seré honesto, no sé mucho sobre los privilegios y permisos de Mac OS X.

Para crear el archivo, lo abrí en emacs, con sudola cuenta de administrador (por ejemplo, usando el sucomando ya que la otra cuenta no tiene privilegios de sudo) y luego lo guardé.

¿Qué cuenta necesito usar para crear el archivo para que funcione para todos los usuarios?
¿Necesito usar el comando sudo?
¿Necesito cambiar los permisos del archivo (por ejemplo, use chmod)?
¿Existe una manera fácil de tomar un archivo existente y cambiar su propiedad en lugar de tener que volver a crear el archivo?
¿Podría alguien explicar por qué ocurre este error?

¿Qué da ls -l para /Library/LaunchAgent/foo.plist
@Mark: da lo siguiente:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
También es posible forzar la carga ( -F).

Respuestas (5)

Si un plist es propiedad de root y puede ser escrito por un usuario que no sea root, eso es un problema de seguridad.

Puede cambiar el propietario a root con sudo chown root <filename>y cambiar los permisos con sudo chmod 644 <filename>(4 para acceso de lectura, 2 para acceso de escritura, 1 para acceso de ejecución, sumados. El primer número es para el propietario, el segundo para el grupo, el tercero para todo el mundo.)

Esto funciona. Sin embargo, estoy confundido en cuanto a por qué tuve que cambiar el propietario a root. ¿Es root el usuario que se utiliza para LaunchAgents?
Sí, creo que sí.
Sé que esta es una publicación anterior, ¡pero esta es una gran respuesta! Cambié los permisos en /system/library/launchdaemons/com.apple.mdnsresponder para probar una solución que Apple recomendó, pero obtendría el error mencionado anteriormente cuando intentara cargarlo después. Cambiar el propietario y los permisos como se describe anteriormente era la única forma de recuperar mi conexión a Internet. ¡Gracias!
Enfrentado lo mismo ahora y resuelto. Supuse que el dueño del archivo invocaría mucho launchctl. Creé el archivo como mi usuario normal y lo estaba ejecutando con sudo. De ahí el error. Debido a que root no es el propietario del archivo, No sudofue necesario. Corrí sin sudoy funcionó bien.

De la descripción del subcomando de la página de manual de launchctl(1)load :

Tenga en cuenta que los archivos de configuración por usuario (LaunchAgents) deben ser propiedad del usuario que los carga. Todos los demonios de todo el sistema (LaunchDaemons) deben ser propiedad de root. Los archivos de configuración no deben ser de escritura grupal o mundial. Estas restricciones existen por razones de seguridad, ya que permitir la escritura en un archivo de configuración de lanzamiento permite especificar qué ejecutable se lanzará.

launchctl tiene varios mensajes "Dudosos...". El código launchd para 10.6.7 (por ejemplo) tiene tres mensajes de este tipo launchctl.c(ver la función 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>

Para evitar estos mensajes, un nombre de ruta debe ser (n.º 3) un archivo o directorio normal 1 (o un enlace simbólico a uno) que sea (n.º 1) propiedad de root o del usuario que invocó y (n.º 2) no "grupo" u "otro". ” escribible (es decir chmod go-w).

1 Sin canalizaciones con nombre, nodos de dispositivos especiales de bloque/carácter, sockets de dominio local, etc.


Es probable que su archivo sea propiedad del usuario administrador, ya que dice que no recibe el mensaje cuando inicia sesión como ese usuario (el nombre de la ruta es propiedad del usuario que invoca en ese caso).
Para que el nombre de la ruta funcione para otros usuarios, debe ser propiedad de root.

Para arreglar esto, haga:

sudo chown root /Library/LaunchAgent/foo.plist

Gracias por la respuesta (cambiar de propietario a raíz), eso es todo lo que necesitaba.

Para que esto sea un poco más que una publicación de 'yo también'... Llegué aquí a través de una ruta intrincada: estaba recibiendo errores "Esta API solo puede ser utilizada por un proceso que se ejecuta dentro de una sesión de Aqua" para un launchdaemon. Buscar una respuesta a eso me llevó a la nota técnica de Apple sobre demonios y agentes que explicaba cómo resolver el error de 'sesión Aqua', pero eso me dejó con problemas de 'propiedad dudosa'. Así llegué aquí, donde se resolvió mi último problema.

Tal vez agregar todo eso a esta discusión haga que algún motor de búsqueda vincule esta página a uno de los problemas precursores, ahorrando así algo de tiempo a algún futuro aventurero.

Tenga en cuenta que esto debería ser un comentario en lugar de una respuesta.
Habría comentado, pero mis puntos de reputación no eran lo suficientemente altos. (¿No parece al revés que uno puede 'responder' con una reputación baja pero no comentar?)

para el archivo en ~/Library/LaunchAgent que es propiedad del usuario y no de root, no sudo, si lo hace, tendrá que cambiar la propiedad ya que lo está cargando desde el usuario root

Esto es lo que sucede cuando la gente no sabe cómo sudofunciona. Para deshabilitar los servicios que se encuentran en archivos propiedad de su usuario, simplemente llame launchtlsin sudo.