um launchd daemon o melhor caminho é ir para a leitura / escrita de arquivos privilegiados em Cocoa?
-
13-09-2019 - |
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:
-
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?
-
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.
Solução
-
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. -
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.