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?

user65297
fonte
@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.

Chapeleiro Louco
fonte
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

Matteo
fonte
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