LaunchAgent tem acesso root indesejado

0

Estou com um problema ao fazer com que o meu LaunchAgent seja executado como um usuário normal (não raiz). Tudo o que li implica que este deve ser o comportamento padrão. A expectativa é que, se você colocar o plist em / Library / LaunchAgents, quando ele for carregado, ele será carregado para o usuário, como usuário, no login do usuário.

O que eu estou descobrindo, no entanto, é que se você executar o launchctl com o sudo ('sudo launchctl load /Library/LaunchAgents/myagent.plist'), o processo será iniciado na sessão do usuário como root . Isso significa que 'ps u -ax' mostra o processo sendo executado como 'root', e também que os arquivos criados pelo processo são de propriedade de root: staff

Eu tentei pesquisar sobre isso e encontrei várias postagens como se alguém quisesse que seu agente tivesse acesso root (o que o IMO está "errado") e eles estão fazendo todas essas postagens no fórum sobre " como posso dar root "e todo mundo está respondendo para explicar" ele não tem raiz, é um agente do usuário "... Isso é o que eu espero, no entanto Eu estou tendo o problema oposto, eu não quero que este agente tenha acesso root, ele não deveria tê-lo, mas ele tem isso.

Se a resposta for " você simplesmente não pode executar o launchctl load com o sudo ou isso acontece ", eu não consegui encontrar isso documentado em lugar nenhum. E se esse for o caso, como eu faço um launchctl descarregar / carregar no Agente de um Daemon que deve ter acesso root, que é algo que eu preciso fazer para o produto se atualizar?

EDIT: Aqui está um exemplo de um post comumente vinculado, que faz parecer que isso não deveria ser um problema, faz parecer impossível para o Agent rodar como root, mesmo que você queira ... link

    
por user1169420 06.06.2016 / 19:19

1 resposta

0

O launchd mantém uma lista separada de itens para cada sessão de usuário ("agentes de lançamento") e um para o contexto do sistema ("daemons de lançamento"). Quando você executa launchctl load como root, o item é carregado na lista do sistema (ou seja, como um daemon de ativação em vez de um agente) não importa onde o arquivo está localizado . O que você precisa fazer depende exatamente do que você está tentando realizar:

  • Se você estiver tentando fazer com que o item seja carregado como um agente de lançamento em sessões de usuário futuras (ou seja, na próxima vez que fizer login), coloque-o em / Library / LaunchAgents, defina as permissões corretamente. depois sente-se e relaxe. Quando um usuário faz o login, ele varre o diretório e carrega o que encontrar.

  • Se você estiver tentando fazer com que o item seja carregado em uma sessão de login existente, será necessário executar launchctl load nessa sessão . Exatamente o que isso significa e como você faz isso é complicado, e pode depender de qual versão do OS X você está rodando (a Apple continua mudando a arquitetura do launchd ...). Pelo menos nas versões mais antigas do OS X, você teria que encontrar o ID do processo de algum processo em execução na sessão que está segmentando e executar algo como:

    sudo launchctl bsexec $PIDInTargetSession sudo -u $TargetUsername launchctl load /Library/LaunchAgents/youritem.plist
    

    Explicação: o primeiro sudo muda para root, então launchctl bsexec $PIDInTargetSession muda para o contexto de bootstrap mach das sessões de destino (eu disse que era complicado), então sudo -u $TargetUsername troca o UID da raiz para o usuário alvo e finalmente launchctl load /Library/LaunchAgents/youritem.plist carrega o agente nessa sessão.

Se isso não acontecer, verifique esta mensagem para alguns alternativas.

    
por 07.06.2016 / 06:35