Por que estou recebendo um erro de "propriedade duvidosa do arquivo" quando o Launch Agent executa meu arquivo .plist?

54

Eu tenho um agente Lançamento configurado para executar um arquivo .plist por exemplo: /Library/LaunchAgent/foo.plist. Dentro deste .plist, ele está configurado para ser executado durante LoginWindowe Aqua.

Quando tento iniciar o meu computador e chegar à tela de login, essa lista deve ser executada, mas, em vez disso, fornece o seguinte erro (no console):

launchctl: Propriedade duvidosa no arquivo (pulando): /Library/LaunchAgents/foo.plist

Quando tento fazer login em uma conta que não seja de administrador, ela exibe exatamente a mesma mensagem de erro. Quando tento fazer login com uma conta de administrador, ele funciona bem.

Serei honesto, não sei muito sobre os privilégios e permissões do Mac OS X.

Para criar o arquivo, abri-lo em emacs, com sudoa conta de administrador (por exemplo, usando o sucomando já que a outra conta não tem privilégios sudo) e depois salvou.

Qual conta eu preciso usar para criar o arquivo para que ele funcione para todos os usuários?
Preciso usar o comando sudo?
Preciso alterar as permissões do arquivo (por exemplo, uso chmod)?
Existe uma maneira fácil de pegar um arquivo existente e alterar sua propriedade em vez de ter que recriar o arquivo?
Alguém poderia explicar por que esse erro ocorre?

Sensível
fonte
O que ls -l fornece para /Library/LaunchAgent/foo.plist
user151019
11
@ Mark: fornece o seguinte:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Sensuous 18/10/10
Também é possível forçar o carregamento ( -F).
Kenorb

Respostas:

51

Se um plist é de propriedade de root e gravável por um usuário que não seja root, isso é um problema de segurança.

Você pode alterar o proprietário para o root sudo chown root <filename>e alterar as permissões com sudo chmod 644 <filename>(4 para acesso de leitura, 2 para acesso de gravação, 1 para acesso de execução, somadas. O primeiro número é para o proprietário, o segundo para o grupo e o terceiro para todos.)

Michiel de Mare
fonte
Isso funciona. Só estou confuso sobre o motivo pelo qual tive que mudar o proprietário para fazer root. O usuário root é usado para LaunchAgents?
Sensável 18/10/10
11
Acho que sim.
Michiel de Mare
11
Sei que este é um post antigo, mas é uma ótima resposta! Alterei as permissões em /system/library/launchdaemons/com.apple.mdnsresponder para tentar uma correção recomendada pela Apple, mas eu receberia o erro mencionado acima ao tentar carregá-lo posteriormente. Alterar o proprietário e as permissões, conforme descrito acima, foi a única maneira de recuperar minha conexão com a Internet. Obrigado!
Enfrentou o mesmo agora e resolvido. Achei que o dono do arquivo muito invocasse launchctl. Criei o arquivo como meu usuário normal e estava executando com sudo. Daí o erro. Como o root não é o proprietário do arquivo, No sudonão era necessário. Eu corri sem sudoe funcionou bem.
Bibhas
14

Na descrição do subcomando da página de manual launchctl (1)load :

Observe que os arquivos de configuração por usuário (LaunchAgents) devem pertencer ao usuário que os carrega. Todos os daemons em todo o sistema (LaunchDaemons) devem pertencer à raiz. Os arquivos de configuração não devem ser graváveis ​​em grupo ou no mundo. Essas restrições existem por motivos de segurança, pois permitir a gravação em um arquivo de configuração launchd permite especificar qual executável será iniciado.

O launchctl possui várias mensagens "Duvidosas ...". O código launchd para 10.6.7 (por exemplo) possui três dessas mensagens launchctl.c(consulte a função 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 essas mensagens, um nome de caminho deve ser (# 3) um arquivo ou diretório regular 1 (ou um link simbólico para um) que seja (# 1) pertencente ao usuário raiz ou que está chamando e (# 2) não seja "grupo" ou "outro ”Gravável (ie chmod go-w).

1 Nenhum canal nomeado, nós de dispositivo especial de bloco / caractere, soquetes de domínio local, etc.


Seu arquivo provavelmente pertence ao usuário administrador, pois você diz que não recebe a mensagem ao fazer login como esse usuário (nesse caso, o nome do caminho pertence ao usuário que está chamando).
Para fazer o nome do caminho funcionar para outros usuários, ele deve ser de propriedade do root.

Para organizar isso, faça:

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

Obrigado pela resposta (alterando o proprietário para o root) - é tudo o que eu precisava.

Para tornar isso um pouco mais do que um post 'eu também' ... cheguei aqui por um caminho complicado: Eu estava recebendo os erros "Esta API só pode ser usada por um processo em execução em uma sessão do Aqua" para um demo de inicialização. Procurar uma resposta para isso me levou à nota técnica da Apple sobre daemons e agentes, que explicava como resolver o erro 'Aqua session', mas isso me deixou com problemas de 'propriedade duvidosa'. Foi assim que cheguei aqui, onde minha questão final foi resolvida.

Talvez adicionar tudo isso a esta discussão faça com que algum mecanismo de pesquisa vincule esta página a um dos problemas precursores, economizando assim algum futuro aventureiro.

Matt Strange
fonte
Observe que isso deve ser um comentário, e não uma resposta.
Studgeek
11
Eu teria comentado, mas meus pontos de reputação não eram altos o suficiente. (Não parece para trás que se pode 'resposta' com uma reputação baixa, mas não comentário?)
Matt Estranho
-2

para arquivo em ~ / Library / LaunchAgent, de propriedade do usuário e não root, não sudo, se você precisar alterar a propriedade, uma vez que está carregando o usuário root

Radha
fonte
-3

É o que acontece quando as pessoas não sabem como sudofunciona. Para desativar os serviços que estão nos arquivos pertencentes ao seu usuário, basta ligar launchtlsem sudo.

Maximo Pech
fonte