PHP无法执行含sudo的系统命令问题求助(Raspbian/Debian LAMP环境)
解决方案:通过PHP执行含sudo的脚本
问题根源
你的PHP脚本由Web服务器(Apache)的www-data用户运行,而非你登录的pi用户,因此给pi配置的NOPASSWD权限对Web进程无效;同时sudo默认要求终端(tty),而Web进程没有交互式终端,导致报错sudo: no tty present and no askpass program specified。
分步解决
1. 给www-data配置最小权限的免密码sudo
运行sudo visudo,在文件末尾添加以下行(仅授权需要的命令,避免过度开放权限):
www-data ALL=(ALL) NOPASSWD: /usr/bin/pkill, /sbin/reboot
保存退出(visudo中按Ctrl+O保存,Ctrl+X退出)。
2. 移除脚本中的冗余sudo
既然www-data已经有权限免密码执行目标命令,直接修改test.sh:
#!/bin/bash pkill chromium-browse reboot
3. 修正脚本权限
无需给脚本777权限(存在安全风险),执行以下命令确保www-data能读取并执行脚本:
chmod 755 test.sh
验证
访问test.php页面,正常情况下返回码应为0,脚本会执行pkill和reboot操作。
提示:给Web服务器用户sudo权限存在安全风险,务必仅授权必要命令,不要使用
NOPASSWD: ALL。
内容的提问来源于stack exchange,提问作者Chiwda
相关产品推荐
相关产品推荐

