um launchd daemon o melhor caminho é ir para a leitura / escrita de arquivos privilegiados em Cocoa?

StackOverflow https://stackoverflow.com/questions/1121253

Pergunta

Eu tenho uma aplicação que necessita de ser capaz de gravar em qualquer arquivos de preferências de usuário do host / Current (que exige privilégios de administrador por Preferências Referência de Utilitários) e também para ativar / desativar um agente launchd através do seu plist (gravável apenas pelo root) .

Eu estou usando SFAuthorizationView para exigir que os usuários autenticados como um administrador antes de alterar esses valores.

Eu estou tentando decidir sobre a melhor maneira de fazer a alteração real desses valores.

A opção hackish barata parece ser a de usar AuthorizationExecuteWithPrivileges() e mv ou defaults, quer através BLAuthentication ou criar algo semelhante a mim mesmo. A desvantagem para isso não está recebendo o valor de retorno de qualquer aplicativo de linha de comando que eu estou executando, além de alguns bugs esotéricos ímpares que eu encontrei (como recebendo um erro -60008 em determinadas situações). Esta é fortemente recomendado contra pela Apple, obviamente, mas as pessoas não parecem fazê-lo e ter algum sucesso com ele.

A opção segundo mais hackish parece ser o todo criar um aplicativo helper com o conjunto bit suid ea opção --self-repair como discutido em vários lugares. Isso parece possível, mas como não é provavelmente muito menos problemas do que a terceira opção.

A terceira opção é criar um daemon launchd de pleno direito que será executado como root e se comunicar com o meu pedido através de uma tomada. Este parece ser um pouco de exagero para ler e escrever alguns arquivos plist, mas também é possível que eu possa encontrar outros usos para ele no caminho, e não vai ser o único daemon para o meu pedido, por isso não parece razoável apenas adicionar outro.

Estou pensando sobre como modificar este href="http://www.gigabytes.it/2009/05/mac-os-x-authorization-services/" rel="nofollow noreferrer"> código de exemplo para os meus propósitos.

Minhas duas perguntas são:

  1. A opção launchd daemon parece ser o melhor caminho a percorrer para isso, ou há uma rota muito mais fácil que eu estou ausente?

  2. Alguém tem usado o mais com sucesso esse código como base para algo semelhante, e que ninguém vê quaisquer problemas gritantes com ele eu estou perdendo? Eu usei-o com sucesso em um aplicativo de teste, mas eu ficaria curioso para ouvir a opinião dos caras nele.

Foi útil?

Solução

  1. launchd é definitivamente a melhor e mais segura maneira de ir: você vai precisar de um pacote de instalação para obter o seu ajudante no lugar. Não se esqueça que o seu ajudante faz e pode fazer absolutamente nada, exceto editar os arquivos que você deseja atingir.

  2. Nenhuma experiência w / o código, mas é baseado fora de BetterAuthorizationSample, de modo que é um começo bom.

Outras dicas

Há também a openauth API, que permite abrir arquivos que necessitam de privilégios de root.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top