【问题标题】:How to execute binary with sudo on Raspberry via PHP exec()?如何通过 PHP exec() 在 Raspberry 上使用 sudo 执行二进制文件?
【发布时间】: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


【解决方案1】:

有没有办法让二进制文件在没有 sudo 的情况下运行?

我尝试设置 SUID 位 (chmod u+s) 位,但效果不佳

如果您设置了 SUID 位,则可执行文件以与拥有可执行文件的用户相同的权限运行。

因此,如果可执行文件归用户 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多