繁体   English   中英

如何通过PHP exec()在Raspberry上使用sudo执行二进制文件?

[英]How to execute binary with sudo on Raspberry via PHP exec()?

我使用了本教程(很抱歉,它是德语)来切换我的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);

这是我到目前为止尝试过的:

  • 没有返回/输出值
  • 我在默认Raspian的Raspi 3上使用lighttpd作为Web服务器
  • 该脚本位于/ var / www / html
  • 二进制文件位于/ var / www / html / bin(也尝试了主目录)
  • webserver / php似乎在默认用户“ pi”下运行(我想知道,在我以前的其他Linux机器上,它曾经是www-data用户)
  • 我试图将sudo权限授予“ pi”用户(也尝试了www-data)
  • 我成为PHP脚本和二进制文件的“ Pi”用户所有者
  • 我用777修改了PHP脚本
  • 我已经尝试过了: php exec()中的sudo

我猜想在PHP执行中使用“ sudo”是一个权限问题。 如果我尝试sudo la la则效果不佳。

我怎样才能让没有要执行的二进制sudo ,或允许PHP使用sudo

提前致谢。

有没有一种方法可以让二进制文件在不使用sudo的情况下运行?

我尝试将SUID位(chmod u + s)设置为无效

如果将SUID位置1,则可执行文件将以拥有该可执行文件的用户相同的权限运行。

因此,如果可执行文件是由用户拥有hello的可执行文件将与用户的访问权限运行hello ,如果该文件是由管理员(拥有root ),它具有管理员权限运行。

因此,在设置SUID位之前,您首先必须更改可执行文件的所有者(如果已经设置了SUID位,它将被删除并且必须再次设置):

sudo chown root:root /some/file/name
sudo chmod u+s /some/file/name

如果该可执行文件调用另一个可执行文件(它使用exec启动其他可执行文件),则默认情况下,该其他可执行文件将不会以更改的访问权限执行。

因此,您不能将SUID位用于shell脚本...

可以使用设置了SUID位的文件的源代码中的以下代码行来更改此行为(如果程序是用C或C ++编写的):

setreuid(geteuid(), geteuid());

(需要以下标头#include行:)

#include <unistd.h>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM