我在 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
当您自己的用户启动时,原因可能有两种可能的解释:
- 您的个人资料中有
alias vcgencmd='sudo vcgencmd
,因此您会自动运行sudo
. vcgencmd
您对需要操作的文件有足够的权限。如果您需要写访问权限,并且文件由您所属的组拥有,并且对该组具有写访问权限,那么您将不需要 sudo。
总之,要么将命令更改为sudo vcgencmd version
.或者找到你需要修改哪些文件的权限并进行修改。