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


54

Tengo un agente 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 acceder a la pantalla de inicio de sesión, esta lista 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é sincero, 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 (p. Ej. Uso chmod)?
¿Hay 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
User151019

1
@ Mark: da lo siguiente:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful

También es posible forzar la carga ( -F).
kenorb

Respuestas:


51

Si una raíz es propiedad de root y un usuario que no la pueda escribir, eso es un problema de seguridad.

Puede cambiar el propietario a raíz 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 ejecutar acceso, sumado. El primer número es para el propietario, el segundo para el grupo, el tercero para todos.)


Esto funciona. Sin embargo, estoy confundido sobre por qué tuve que cambiar el propietario a root. ¿Es root el usuario que se usa para LaunchAgents?
Sentido

1
Sí, eso creo.
Michiel de Mare

1
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 al intentar cargarlo después. Cambiar el propietario y los permisos como se describió anteriormente fue la única forma de recuperar mi conexión a Internet. ¡Gracias!

Frente a lo mismo ahora y resuelto. Supuse que el dueño del archivo invocaba mucho launchctl. Creé el archivo como mi usuario normal y estaba ejecutando con sudo. De ahí el error. Como root no es el propietario del archivo, No sudono era necesario. Corrí sin sudoy funcionó bien.
Bibhas

14

Desde el launchctl (1) página de manual ‘s descripción del loadsubcomando:

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 launchd permite especificar qué ejecutable se lanzará.

launchctl tiene varios mensajes "dudosos ...". El launchd código para 10.6.7 (por ejemplo) tiene tres de tales mensajes en su launchctl.c(véase 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 (# 3) un archivo o directorio normal 1 (o un enlace simbólico a uno) que sea (# 1) propiedad de root o el usuario que invoca y (# 2) no "grupo" u "otro "Escribible (es decir chmod go-w).

1 No hay canalizaciones con nombre, nodos de dispositivos especiales de bloque / carácter, zócalos de dominio local, etc.


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

Para arreglar esto, haga:

sudo chown root /Library/LaunchAgent/foo.plist

1

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

Para hacer esto un poco más que una publicación 'yo también' ... llegué aquí a través de una ruta complicada: estaba recibiendo errores de "Esta API solo puede ser utilizada por un proceso que se ejecuta dentro de una sesión de Aqua" para un launchdaemon. La búsqueda de 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 de Aqua', pero eso me dejó con problemas de 'dudosa propiedad'. Así es como llegué aquí, donde se resolvió mi problema final.

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


Tenga en cuenta que esto debería ser un comentario en lugar de una respuesta.
studgeek

1
Hubiera comentado, pero mis puntos de reputación no eran lo suficientemente altos. (¿No parece al revés que uno pueda 'responder' con una reputación baja pero no comentar?)
Matt Strange

-2

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


-3

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.