当前位置:论坛首页 > BUG提交 > Linux面板

【已回复】[Node项目管理] PM2 项目点"启动"时运行用户设置不

发表在 BUG提交6 天前 [复制链接] 1 55


环境:宝塔 Linux 面板 13.1.0,PM2 v7.1.0(Node v24.22.1),CentOS/Ubuntu 均可复现

复现步骤:
网站 → Node项目 → 新建 PM2 项目,"运行用户"选择 www;
项目停止后,点"启动"(或 PM2 监控页的启动);
ps aux 或 PM2 监控查看进程:以 root 运行;
同一项目点"保存配置"(不改任何内容):进程变为 www 运行。
根因(mod/project/nodejs/ 下代码):
pm2Mod.start_project()(pm2Mod.py:763-808)以 root 执行创建时缓存的启动脚本(ExecShell 未传 user 参数,pm2Mod.py:797),脚本硬编码 export HOME=/root(pm2Mod.py:748),整个启动过程不使用项目配置中的 run_user;进程身份只取决于磁盘 ecosystem 文件残留的 uid/gid。
PM2 监控页启动走 pm2Mod.start()(pm2Mod.py:367-387),执行 pm2 start <进程名>,PM2 不会重读 ecosystem,沿用旧记录的 uid。
而"保存配置"(comMod.modify_project → structure_ecosystem_for_config_body,pm2Mod.py:629-630)会用表单 run_user 重写 uid/gid 并 delete+start 重新注册,所以表现正常。
旧版模型 nodejsModel.start_project 是 ExecShell(..., user=run_user),新版 pm2Mod 没有等价兜底,属回归。


修复建议:
pm2Mod.start_project 启动前用 DB 中的 run_user 重新注入/校验 ecosystem 的 uid/gid,与保存配置路径行为对齐;
对已存在的 pm2 记录,启动改为 delete + start(或等效方式)确保 uid 生效,而不是 pm2 start <name> 直接恢复旧记录;
顺带修复 base.py:1065 replace_or_add_field:uid/gid 注入应覆盖 apps 数组中的每个 app,并避免匹配到注释文本。


影响:
生产环境 Node 应用以 root 运行,权限过大,存在安全风险;且同一面板两个"启动"入口行为不一致,用户无法感知。




使用道具 举报 只看该作者 回复
发表于 5 天前 | 显示全部楼层
您好,非常感谢反馈和支持!您的建议已收到并记录,后续会有相关人员进行排障修复
如果您还有更多问题和疑虑,您可以通过客服咨询宝塔面板相关问题:https://docs.bt.cn/wechat-service
操作方式:复制链接在微信打开,即可在线咨询客服。
为提高沟通效率,建议您在微信咨询前先填写以下信息,将信息一并发送给客服,以便客服快速定位您的问题:
问题描述(请尽量详细):
论坛帖子地址:
操作系统:
面板版本:
感谢您的支持!
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

紧急运维服务

响应时间:3分钟

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

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

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

点击联系技术分析

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

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