Execute o comando 'sudo' na inicialização / inicialização no Mac OS X

2

Como executar um sudo na linha de comando quando uma inicialização do Mac?

Especificamente, estou tentando executar a seguinte linha no Mountain Lion:

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in

Existem outras questões sobre a execução de ferramentas de linha de comando na inicialização (como isso ), mas elas não abordam problema de sudo e as permissões de administrador / senha necessárias.

Outras perguntas e amp; As respostas discutem launchd , mas isso parece ser para processos do daemon que precisam ser assistidos e relançados se falharem. Em contraste, estou simplesmente tentando fazer uma única vez, executar essa linha uma vez na inicialização.

Se as coisas mudaram ao longo dos anos, seria bom rodar um sudo na inicialização tanto nas versões mais antigas do Mac OS X, como no Mountain Lion, quanto nas mais recentes, como Yosemite / El Capitan.

    
por Basil Bourque 07.08.2015 / 21:30

2 respostas

3

embora launchd e o termo LaunchDaemon soem como daemons, é a maneira preferida de automatizar tudo. Apple diz em sua documentação,

Login and logout scripts are a deprecated technology. In most cases, you should use launchd jobs instead, as described in Creating Launch Daemons and Agents

scripts de login e logout são scripts que devem ser executados uma vez e finalizados. eles são acionados pela janela de login.

Acho que colocar seu comando em um arquivo plst launchd é o jeito certo de fazê-lo. Primeiro, você pode excluir agentes de ativação, porque eles serão executados sempre como usuário. porque você quer que o script seja executado como root, você deve colocá-lo em /Library/LaunchDaemons ( /System/Library/LaunchDaemons também funcionaria, mas sistema ....) e adicione a sinalização RunAtLoad , mas não defina KeepAlive (ou configure-o para algo como travado, veja esta boa documentação ).

EDIT porque o script está sendo executado como root, você pode omitir o sudo , outra opção seria, criar um script e incluí-lo em /etc/sudoers ( visudo ) com o nopasswd flag e execute como usuário

    
por 07.08.2015 / 23:20
2

Esta pergunta tem algumas boas respostas em apple.stackexchange.com .

cron é provavelmente o mais fácil de configurar; usando a entrada especial @reboot /path/to/script no arquivo crontab, seu cronjob será executado apenas na inicialização. Há uma resposta sobre como fazer isso na pergunta vinculada acima.

launchd é provavelmente a solução certa aqui. Você pode usá-lo para executar comandos e scripts únicos também. Uma das outras respostas na questão acima relaciona como escrever um arquivo PropertyList para isso. Observe que o PropertyList deve ser colocado sob /Library/LaunchDaemons para ser executado como root.

    
por 07.08.2015 / 23:19