树莓派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
相关产品推荐
相关产品推荐

