Usando sudoers para permitir que o comando php execute

3

Estou tentando fazer com que minha página php execute este comando:

shell_exec("sudo /home/xbian/433Utils/RPi_utils/codesend {$num}");

Então, adicionei essa entrada ao meu arquivo sudoers com visudo:

www-data ALL=NOPASSWD: /home/xbian/433Utils/RPi_utils/codesend

Mas não está funcionando. Quando executo o comando no shell com o sudo ele funciona. Tenho certeza de que não há nada de errado com o resto do código, quando eu substituo shell_exec com echo, recebo o comando correto impresso. Eu também verifiquei que meu php está sendo executado como usuário www-data.

Acabei de obter a entrada sudoers errada? Como posso solucionar problemas? Eu entendo que não posso realmente executar comandos como www-data sem dar uma senha, o que é uma má idéia.

    
por Stoopkid 26.01.2014 / 02:06

3 respostas

2

Sua linha de sudoers está correta, pois permite que o www-data execute o único comando como root. A sintaxe do php parece mais correta (você está validando $ num para ter certeza de que é um número? Símbolos diversos podem causar danos reais aqui. Veja link ) As duas coisas que você não mencionou foi qual apache mpm você está usando, e você está executando o php no modo de segurança. O shell_exec não funciona no modo de segurança e usa o fork, que pode não funcionar com todos os mpm. Eu recomendaria usar o premp mpm.

    
por 26.01.2014 / 05:11
1

Sim, eu acho que é uma péssima idéia adicionar o usuário do apache www-data à lista de sudoers, especialmente porque você inclui uma variável $num dentro do seu código que poderia prejudicar seriamente seu servidor se injetado erroneamente (especialmente se usado por um usuário sudoer).

Em vez disso, sugiro criar um novo grupo, adicionar www-data a esse grupo e atribuir /home/xbian/433Utils/RPi_utils/codesend ao grupo. Em seguida, conceda permissões a codesend para serem executadas por todos os membros desse grupo; você não deve receber nenhuma senha e seu sistema ficará seguro.

    
por 26.01.2014 / 02:17
0

Permita que o usuário www-data execute para executar o programa1 e o programa2 sem senha:

sudo visudo

Adicione ao conteúdo do arquivo sudoers:

User_Alias WWW_USER = www-data
Cmnd_Alias WWW_COMMANDS = /sbin/program1, /sbin/program2
WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS

Salvar.

de link

    
por 04.01.2016 / 17:31