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

如何让www-data通过PHP安全执行需sudo权限的Python脚本及终止进程

安全配置www-data执行sudo pkill停止指定Python脚本的权限

1. 精准配置sudoers权限

不要给www-data全开sudo权限,而是添加仅允许执行目标pkill命令的规则:

  1. 打开sudoers编辑工具(必须用visudo避免语法错误导致sudo失效):
    sudo visudo
    
  2. 在文件末尾添加以下规则(和你之前配置Python脚本的规则放在一起):
    www-data ALL=(ALL) NOPASSWD:/usr/bin/pkill -f /var/www/Web-EvilBlock/EvilBlock.py
    
    • 这里指定了pkill的绝对路径/usr/bin/pkill,同时明确要匹配的脚本完整路径/var/www/Web-EvilBlock/EvilBlock.py,避免www-data滥用pkill终止其他无关进程,最大化安全性。

2. 验证权限是否生效

切换到www-data用户测试:

sudo -u www-data bash
sudo /usr/bin/pkill -f /var/www/Web-EvilBlock/EvilBlock.py

如果无需输入密码即可执行,且能正确终止EvilBlock.py进程,说明配置生效。

3. PHP按钮调用实现

在处理停止按钮的PHP代码中,调用完整的绝对路径命令(避免环境变量路径问题):

<?php
if (isset($_POST['stop_evilblock'])) {
    // 执行停止命令,捕获输出和返回状态
    exec('sudo /usr/bin/pkill -f /var/www/Web-EvilBlock/EvilBlock.py 2>&1', $output, $return_var);
    // 根据返回状态判断执行结果
    if ($return_var === 0) {
        echo "EvilBlock.py已成功停止";
    } else {
        echo "停止失败,错误信息:" . implode("\n", $output);
    }
}
?>

安全提示

  • 始终用绝对路径指定命令和脚本,防止恶意路径劫持
  • 定期检查sudoers配置,移除不必要的权限规则
  • 限制www-data的文件操作权限,仅保留必要目录的读写执行权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:19