[英]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);
这是我到目前为止尝试过的:
我猜想在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.