como faço para executar ações raiz de uma conta não raiz?


15

Eu quero poder reiniciar serviços de um script php. em execução na conta www-user.

Qual é a maneira preferida de executar essas ações?

Reconheço que posso colocar criar um arquivo com comandos que'd, lido por CRON, mas a solução coça.

O que estou pensando é em um serviço minúsculo, executando sob raiz, permitindo "métodos" predefinidos para que ações raiz arbitrárias não possam ser executadas.

Existe alguma ferramenta para isso?


@MadHatter, Mona Lisa envia seus cumprimentos, ;-) #
user65297 22/10

Respostas:


27

Você pode reinventar a roda, mas honestamente, eu uso o sudo sem senha para isso. Por exemplo, meu sistema de monitoramento precisa poder executar um comando para verificar o RAID do hardware. Isso requer privilégios de root, mas não quero executar todo o sistema de monitoramento como root; portanto, tenho sudoersuma linha que diz

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

e, em seguida, execute o comando sudo /usr/lib/nagios/plugins/check_md_raidcomo usuário de monitoramento, quando eu precisar verificar o RAID.

Você poderia ter uma linha de sudoers que dizia

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

então faça o php executar sudo /etc/rc.d/init.d/myservice restart.


2
Este é o caminho a seguir. Eu usei esse processo para uma tarefa semelhante. Está em produção há mais de 3 anos. Nada nunca falhou e o risco à segurança é quase inexistente, desde que você proteja o código PHP que o aciona corretamente com a lógica do aplicativo.
Andrew Ensley

1
Obrigado, sudoers novos para mim e bater no alvo. @ Andrew, obrigado pela informação adicional.
user65297

1
user65927, desculpe-me se isso não for novidade para você, mas a etiqueta local é que, quando você tem uma resposta satisfatória a uma pergunta, aceita-a clicando no esboço ao lado.
MadHatter

1
Você também pode precisar comentar a linha "Padrões necessários" no seu arquivo sudoers. Este passo me pegou algumas vezes. (Por exemplo, altere "Defaults requiretty" para "#Defaults requiretty")
steve.lippert 10/10

6

Dê uma olhada no sudo : permite especificar ações que podem ser executadas como outro usuário (raiz no seu caso).

Você pode, por exemplo, adicionar ao seu /etc/sudoers(não edite o arquivo diretamente visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Veja man sudopara detalhes e sintaxe do arquivo


2
tenha MUITO cuidado ao editar o /etc/sudoersarquivo. Se, de alguma forma, estiver sintaticamente incorreto, alterá-lo novamente é um pesadelo, porque você precisa sudovoltar, mas não pode, porque acabou de apagar o sudo. Você acaba tendo que usar um CD / DVD de resgate e montar a partição manualmente.
puk

1
@puk Na verdade, para editar calafrios, você precisa de acesso root e, se o arquivo estiver danificado, você poderá fazer login como root e restaurá-lo (a partir de uma cópia de backup) ou corrigi-lo manualmente. O visudo também realiza verificações de integridade no arquivo antes de gravá-lo.
Matteo

o que é shudders? É verdade que o visudo faz verificações de sanidade, mas elas não ajudam depois que o dano é causado: P
puk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.