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

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

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

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

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

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

Tudo o que ele imprime é "Falha na inicialização do VCHI" (em vez das supostas informações de versão que aparecem quando eu o executo no meu usuário, mesmo sem sudo), que aparece quando o vcgencmd é executado com permissões erradas.

Correndo por exemplo

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

funciona bem sem nenhuma /etc/sudoersalteração, então não há problema com o PHP (como proibido shell_execou algo assim).

O que mais precisa ser definido para executar um comando?

Responder1

Se quiser usar algo que você adicionou /etc/sudoers, você deve ligar para sudo.

sudoé apenas um programa com o bit setuid definido. Não há absolutamente nada de especial nisso, o que significa que não se interpõe toda vez que um programa é iniciado.

O motivo pelo qual você pode ligar 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 de gravação.

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

  1. Você tem alias vcgencmd='sudo vcgencmdno seu perfil, assim você executa automaticamente o sudo.
  2. Você tem permissões suficientes para os arquivos que vcgencmdprecisam funcionar. Se você precisar de acesso de gravação e os arquivos pertencerem a um grupo do qual você é membro e tiverem acesso de gravação para esse grupo, você não precisará do sudo.

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

informação relacionada