0

我有从 Raspberry 播放音乐并使用脚本 gpio.sh 打开 LED 的网络服务器。我正在使用 mpd、mpc 和 gpio。

我的 /var/www/index.php :

<html><body><?php
echo exec('whoami');
if(isset($_POST['button1']))
{
   shell_exec('mpc play')
   shell_exec('/bin/bash /var/www/gpio.sh');
}
?>
    <form method="post">
    <p align=center>
    OUTPUT (AUDIO) => <button name="button1">PLAY</button>
    </p>
    </form>
    </body></html>

在终端中,我可以成功运行 /bin/bash /var/www/gpio.sh 并且 LED 亮起。从网络服务器'mpc play' WORKS 并且可以播放一首歌曲但它不能运行那个 gpio.sh 。index.php 的所有者是 www-data

-rwx------ 1 www-data www-data 1262 Dec 8 10:45 gpio.sh

-rwx------ 1 www-data www-data 272 Dec 9 09:39 index.php

我应该怎么办 ?当我将 index.php 或 gpio.sh 的所有者更改为 root 时,php 无法执行。我的 index.php 错了吗?我无法从 php 执行 .sh。请帮忙。

4

1 回答 1

0

完美的解决方案是为脚本 gpio.sh 设置SUID ,但不幸的是,只要 gpio.sh 是一个脚本,你就不能这样做。

你有三个选择:

  • 你可以把你的脚本变成说 C++ 应用程序,然后设置 SUID
  • 您可以为 python 使用一些 GPIO 库,这些库不会强制 root 使用,例如:pigpio
  • 您可以为 python 解释器设置 SUID,但我通常不确定它的好主意
于 2014-12-09T12:40:28.033 回答