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 vcgencmd
ferramenta 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/sudoers
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?
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 version
pode funcionar quando iniciado, pois seu próprio usuário tem duas explicações possíveis:
- Você tem
alias vcgencmd='sudo vcgencmd
no seu perfil, assim você executa automaticamente osudo
. - Você tem permissões suficientes para os arquivos que
vcgencmd
precisam 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.