【发布时间】:2018-03-19 05:08:08
【问题描述】:
我使用本教程(抱歉,它是德语)来切换我的 433MHz 插座: https://tutorials-raspberrypi.de/raspberry-pi-funksteckdosen-433-mhz-steuern/
我编译了一个文件,通过 RC 代码打开和关闭套接字。如果我直接在 Pi Shell 上运行它,它可以正常工作:
sudo /var/www/html/bin/RPiControl -3313
但如果我在我的 PHP 脚本上通过 exec() 运行它,它不会:
exec('sudo /var/www/html/bin/RPiControl -3313', $output, $return);
到目前为止,这是我尝试过的:
- 没有返回/输出值
- 我在 Raspi 3 上使用 lighttpd 作为网络服务器,默认为 Raspian
- 脚本位于 /var/www/html
- 二进制文件位于 /var/www/html/bin(也尝试过主目录)
- webserver/php 似乎在默认用户“pi”下运行(我想知道,在我的其他 linux 机器上它曾经是 www-data 用户)
- 我尝试将 sudo 权限授予“pi”用户(也尝试了 www-data)
- 我将“Pi”用户设为 PHP 脚本和二进制文件的所有者
- 我用 777 修改了 PHP 脚本
- 我已经试过了:sudo in php exec()
我猜这是在 PHP 执行中使用“sudo”的权限问题。如果我尝试sudo la la,它就无法正常工作。
如何在没有sudo 的情况下执行二进制文件,或者允许PHP 使用sudo?
提前致谢。
【问题讨论】:
-
网络服务器是否可以通过互联网访问?您确定希望 PHP 能够以 root 身份运行吗?听起来您基本上是将服务器的控制权交给了偶然发现它的人
-
不,它只是在本地网络中,打开我的电视灯...
-
sudo in php exec()的可能重复
-
有没有办法让二进制文件在没有 sudo 的情况下运行?
-
您可能需要编写一个独立的可执行文件,将所需状态作为程序参数(是
RPiControl吗?)。将其设为 setuid 二进制文件,以便它可以切换 LED(或它所做的任何事情;我不确定“袜子”是什么)。然后,让 PHP 以所需状态(开/关)但没有 sudo 调用它。您的独立程序也可以设置其 ACL 位,因此只有 Web 服务器可以调用它,但它似乎有点超出需要。小心 setuid 脚本;更喜欢编译的程序。
标签: php linux raspberry-pi exec sudo