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

如何在sudoers中正确配置sudo -u指定用户的免密执行规则

解决方法

核心原因是sudoers规则默认仅允许以root身份执行配置的命令,你调用时指定了-u www-data切换到自身用户执行,规则没有匹配该场景导致报错。

步骤1:修改sudoers配置

执行sudo visudo命令编辑配置文件,添加如下规则:

www-data ALL=(www-data) NOPASSWD: /usr/bin/python3 /var/www/html/script.py

规则说明:

  • 括号中的(www-data)显式声明了允许调用sudo的用户可以切换到www-data身份执行后续命令,匹配你代码中sudo -u www-data的参数要求
  • 命令段仅需填写实际要执行的程序完整路径和参数,不需要添加sudo前缀或-u参数,否则会触发visudo语法校验错误

步骤2:验证配置有效性

可以先手动切换到www-data用户测试命令是否能正常执行,避免修改代码后反复排查:

# 切换到www-data用户
sudo su -s /bin/bash www-data
# 测试sudo命令是否能无密码执行
sudo -u www-data /usr/bin/python3 /var/www/html/script.py

如果没有弹出密码输入提示、脚本正常运行,说明配置生效。

可选优化方案

如果你的python脚本不需要额外的系统特权,由于PHP本身就以www-data身份运行,你可以直接去掉sudo调用,PHP代码改为:

<?php
    $command = '/usr/bin/python3 /var/www/html/script.py';
    shell_exec($command);
?>

这种方案不需要配置sudo规则,运行效率更高且安全风险更低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:09