当前位置:论坛首页 > Linux面板 > 建议

【已记录】宝塔面板 jobs.py ,会误删包含 body_filter_by_lua_blo...

发表在 Linux面板昨天 00:55 [复制链接] 1 67

在使用宝塔 Linux 面板时发现一个可能导致 Nginx 虚拟主机配置文件被自动删除的问题,已经通过 Linux auditd 定位到具体代码。
我的站点配置文件:
/www/server/panel/vhost/nginx/example.cn.conf
会在宝塔面板 reload 后被自动删除。
auditd 记录到实际删除时间为:
2026-08-17 16:11:03
删除进程为:
exe="/www/server/panel/pyenv/bin/python3.7"COMMAND:/www/server/panel/pyenv/bin/python3 /www/server/panel/class/jobs.py
系统调用为:
SYSCALL=unlinksuccess=yes
被删除文件:
/www/server/panel/vhost/nginx/example.cn.conf
继续检查 /www/server/panel/class/jobs.py 后,发现 clear_other_conf() 中存在以下代码:
def clear_other_conf():    path = '/www/server/panel/vhost/nginx'    ...    conf_body = public.readFile(filename)    if not conf_body: continue    if conf_body.find('body_filter_by_lua_block') != -1 and conf_body.find('</head') and conf_body.find('<scrip'):        is_reload = True        os.remove(filename)
这里后两个 find() 判断疑似存在逻辑错误。
Python str.find() 在字符串不存在时返回 -1,而:
bool(-1) == True
所以假设一个正常 Nginx 配置中:
body_filter_by_lua_block -> find = 5525</head                   -> find = -1<scrip                   -> find = -1
当前条件实际上仍会被判断为 True:
True and bool(-1) and bool(-1)
最终执行:
os.remove(filename)
导致整个正常的 Nginx vhost 配置被删除。
我的 body_filter_by_lua_block 是正常的 OpenResty/Nginx Lua 配置,用于处理退出登录后的 HTTP 响应,并不存在 HTML 注入相关的 </head> 或 <script> 内容。
我认为这里原本预期的判断可能应该是:
if (    conf_body.find('body_filter_by_lua_block') != -1    and conf_body.find('</head') != -1    and conf_body.find('<scrip') != -1):
或直接使用:
if (    'body_filter_by_lua_block' in conf_body    and '</head' in conf_body    and '<scrip' in conf_body):
目前我的临时处理方式是移除站点配置中的 body_filter_by_lua_block,保留其他 Lua 功能,从而避免触发该清理逻辑。
希望官方确认一下 clear_other_conf() 这里的判断是否为 Bug。如果属实,建议尽快修复,因为当前逻辑可能误删用户合法的 Nginx/OpenResty 配置文件,而且删除的是整个 .conf 文件,不只是相关配置段。

使用道具 举报 只看该作者 回复
发表于 昨天 17:33 | 显示全部楼层
您好,您反馈的问题已记录。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表