Adicionando www-data para / etc / sudoers não funciona para o PHP shell_exec () para executar um comando

0

Estou rodando o webserver lighttpd em Raspbian (baseado em Debian) em um Raspberry Pi. O servidor é executado como usuário www-data (verificado com ps aux ). Eu adicionei a seguinte linha a /etc/sudoers :

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

para poder executar a ferramenta vcgencmd do Raspberry Pi que fornece informações de status de dentro de um arquivo PHP com

<? echo shell_exec('vcgencmd version'); ?>

Tudo o que é impresso é "VCHI initialization failed" (em vez da suposta informação de versão que aparece quando eu o executo no meu usuário, mesmo sem sudo ) que aparece quando vcgencmd é executado com permissões erradas.

Executando por exemplo

<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>

funciona bem sem qualquer /etc/sudoers de alteração, então não há problema com o PHP (como proibido shell_exec ou algo assim).

O que mais precisa ser definido para executar um comando?

    
por Foo Bar 10.05.2014 / 22:49

1 resposta

2

Se você quiser usar algo que você adicionou a /etc/sudoers , você precisa chamar sudo .

sudo é apenas um programa com o conjunto de bits setuid. Não há nada mais especial sobre isso, o que significa que não se interpõe toda vez que um programa é lançado.

O motivo pelo qual você pode chamar cat /sys/class/thermal/thermal_zone*/temp é porque você tem acesso de leitura a esses arquivos. Dependendo de como as permissões do seu sistema de arquivos estão definidas, você pode ter acesso de leitura, mas não necessariamente escrever.

O motivo vcgencmd version pode funcionar quando iniciado, pois seu próprio usuário tem duas explicações possíveis:

  1. Você tem alias vcgencmd='sudo vcgencmd em seu perfil, portanto, você executa automaticamente sudo .
  2. Você tem permissões suficientes para os arquivos que o vcgencmd precisa operar. Se você precisar de acesso de gravação e os arquivos pertencerem a um grupo no qual você é um membro e tiver acesso de gravação para esse grupo, não precisará de sudo.

Em resumo, altere seu comando para sudo vcgencmd version . Ou encontre quais permissões de arquivo você precisa para modificá-las e modificá-las.

    
por 10.05.2014 / 23:20

Tags