You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派3上PHP无法执行Python脚本,如何赋予www-data sudo权限?

解决www-data用户执行Python脚本的sudo权限问题

看起来你已经排查了路径和文件权限的问题,但核心卡在了www-data用户的sudo权限上——直接给全sudo权限太不安全,我们可以精准授权让它免密执行特定的Python脚本,具体步骤如下:

1. 安全编辑sudoers配置文件

永远不要直接编辑/etc/sudoers,要用系统提供的visudo工具,它会帮你检查语法错误,避免锁死sudo功能:

sudo visudo

2. 添加精准的免密sudo规则

在文件末尾添加一行规则,指定www-data可以免密执行你目标Python脚本的绝对路径(一定要用绝对路径,避免环境变量冲突):

www-data ALL=(ALL) NOPASSWD: /usr/bin/python /var/www/html/socket/power_on.py

提示:如果你的系统默认是Python3,把/usr/bin/python换成/usr/bin/python3即可;如果不确定路径,执行which python或which python3查看。

3. 验证配置是否生效

先切换到www-data用户,测试sudo执行脚本是否正常:

sudo su - www-data -s /bin/bash
sudo /usr/bin/python /var/www/html/socket/power_on.py

如果脚本能正常运行,说明权限配置没问题。

4. 调整PHP代码捕获错误

修改你的PHP代码,加上2>&1把错误输出也捕获到(方便调试),同时用正确的绝对路径:

<?php
// 捕获标准输出和错误输出,便于排查问题
$output = shell_exec("sudo /usr/bin/python /var/www/html/socket/power_on.py 2>&1");
echo $output;
?>

安全提醒

  • 不要给www-data用户全量sudo权限(比如www-data ALL=(ALL) NOPASSWD: ALL),这会带来极大的安全风险;
  • 目标脚本power_on.py没必要设置777权限,改成755即可,避免其他用户随意修改脚本内容;
  • 如果脚本涉及硬件操作(比如控制电源),确保只有必要的用户能访问这个PHP页面。

内容的提问来源于stack exchange,提问作者Casper Round

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:17