将 www-data 添加到 /etc/sudoers 无法让 PHP shell_exec() 运行命令

将 www-data 添加到 /etc/sudoers 无法让 PHP shell_exec() 运行命令

我在 Raspberry Pi 上的 Raspbian(基于 Debian)上运行网络服务器 lighttpd。服务器以用户 www-data 运行(用 进行检查ps aux)。我添加了以下行/etc/sudoers

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

能够vcgencmd从 Raspberry Pi 运行该工具,该工具从 PHP 文件中提供状态信息

<? echo shell_exec('vcgencmd version'); ?>

它打印的只是“VCHI 初始化失败”(而不是当我在用户上运行它时出现的假定版本信息,即使没有sudo),当 vcgencmd 以错误的权限运行时出现。

以跑步为例

<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>

无需任何/etc/sudoers更改即可正常工作,因此 PHP 没有问题(例如禁止shell_exec或其他问题)。

为了执行命令还需要设置什么?

答案1

如果你想使用你添加的东西/etc/sudoers,你必须打电话sudo

sudo只是一个设置了 setuid 位的程序。它绝对没有什么特别之处,这意味着它不会在每次启动程序时进行干预。

您可以调用的原因cat /sys/class/thermal/thermal_zone*/temp是您对这些文件具有读取权限。根据文件系统权限的设置方式,您可能具有读取权限,但不一定具有写入权限。

vcgencmd version当您自己的用户启动时,原因可能有两种可能的解释:

  1. 您的个人资料中有alias vcgencmd='sudo vcgencmd,因此您会自动运行sudo.
  2. vcgencmd您对需要操作的文件有足够的权限。如果您需要写访问权限,并且文件由您所属的组拥有,并且对该组具有写访问权限,那么您将不需要 sudo。

总之,要么将命令更改为sudo vcgencmd version.或者找到你需要修改哪些文件的权限并进行修改。

相关内容