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 LoginWindow
y 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 sudo
la cuenta de administrador (por ejemplo, usando el su
comando 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?
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.)
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 sudo
fue necesario. Corrí sin sudo
y 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
).
Dubious permissions on file (skipping): <pathname>
Dubious ownership on file (skipping): <pathname>
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.
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 sudo
funciona. Para deshabilitar los servicios que se encuentran en archivos propiedad de su usuario, simplemente llame launchtl
sin sudo
.
mmmmmm
sensato
-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
kenorb
-F
).