-
TPanel v1.3.8 Stable
released this
2026-06-01 14:09:29 +08:00 | -2 commits to main since this releaseTPanel v1.3.8 发布说明
🚀 TPanel v1.3.8 — 8 个隐藏 bug 紧急修复
一次 10 小时的"挖 bug 马拉松",挖出 v1.0.0 时代就存在但从未暴露的 8 个致命 bug。生产服务器(zphp.cn)现已全部验证通过。
🐛 8 个隐藏 bug 详细列表
1. zip 魔数校验永远失败 🔴
症状:
bash install.sh永远卡在 [3/8] 下载源码,5 个下载源全报"下载到的东西不是 zip"。根因:install.sh 用
head -c 4 file | grep -q "PK\x03\x04"校验 zip 魔数。但grep默认是文本模式,\x03\x04不会被解析成 0x03/0x04 字节——它只认\n、\t等。所以这段代码要找的是 10 字符的字面字符串 "PK\x03\x04",永远匹配不上 4 字节的真魔数PK\x03\x04。修法:用
od -An -tx1 -N4把前 4 字节转成 hex 字符串504b0304再比较。2. 解压步骤漏复制根目录文件 🔴
症状:
ERROR: Could not open requirements file: [Errno 2] No such file or directory: '/opt/tpanel/requirements.txt'根因:install.sh 的解压步骤只
cp -r backend frontend,没复制根目录的requirements.txt、README.md等。修法:加 for 循环复制
requirements.txt .gitignore README.md SPEC.md。3. /etc/nginx/tpanel 权限问题 🔴
症状:
PermissionError: [Errno 13] Permission denied: '/etc/nginx/tpanel',TPanel 服务起不来。根因:
config.py在 import 时就os.makedirs('/etc/nginx/tpanel'),但 install.sh 从来没创建过这个目录、也没授权 tpanel 用户。修法:install.sh 2/8 步骤加
mkdir -p /etc/nginx/tpanel && chown tpanel:tpanel。4. systemd ExecStart 没传端口参数 🔴
症状:服务监听着
127.0.0.1:8848,Nginx proxy 到127.0.0.1:8888→ 502 Bad Gateway。根因:
- install.sh ExecStart:
python main.py(没传端口参数) - main.py 启动逻辑:
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8848 - install.sh 还设了
Environment=TPANEL_PORT=8888,但 main.py 根本不读环境变量——只读sys.argv
修法:ExecStart 改成
python main.py ${PANEL_PORT}显式传参。5. 前端 JS 2 处语法错误(v1.0.0 时代就有)🔴
症状:登录后所有功能点不动,浏览器 Console 报
Uncaught SyntaxError。两处 bug:
- 1987 行:
let bread = '<span onclick="navigateFiles('')">/</span>';— 单引号 JS 字符串里嵌套''触发字符串提前闭合 - 2023 行:
pdf':'📕','doc':'📘',—pdf'多写了一个单引号
修法:1987 行外层改反引号 template literal;2023 行删多余单引号。
6. PHP-FPM 完全没装 🔴
症状:成功创建网站,ping 通了,访问 404 Not Found。
根因:install.sh 完全没装 PHP-FPM!zip 里也没 PHP 相关的 .deb/.rpm 包。
修法:install.sh 加
php8.2-fpm + 常用扩展(curl/mbstring/xml/zip/gd/mysql),启动并设置开机自启;main.py 默认 php_version 改 8.2。7. PHP-FPM unix socket 在 systemd 环境失效 🟡
症状:nginx 报
connect() to unix:/run/php/php-fpm8.2.sock failed (2: No such file or directory),但 cgi-fcgi 直接连 socket 成功,权限也对。根因:systemd 的
PrivateTmp=或 mount namespace 隔离让 nginx worker 看到的/run/php/和 PHP-FPM 看到的不是同一个。修法:PHP-FPM listen 改 TCP
127.0.0.1:9000(CentOS/RHEL 默认就是 TCP),system.pyfpm_sock改 TCP,install.sh sed 改www.conf的 listen 指令。8. MariaDB 没装 + SQL 注入漏洞 🔴🔴(最危险)
症状:
/bin/sh: 1: mysql: not found— install.sh 没装 MariaDB/bin/sh: 1: zphp.cn: not found— TPanel 用shell=True拼 SQL,zphp.cn被 shell 当成命令
根因:
- install.sh 完全没装 mariadb-server
- system.py
create_mysql_db用 f-string 拼mysql -e "{sql}",shell=True+ f-string = SQL 注入漏洞——name 含反引号或单引号可执行任意 SQL - MariaDB 默认
unix_socket认证,tpanel 用户根本登不上去
修法:
- install.sh 加
mariadb-server mariadb-client,启动 mariadb - install.sh 写
/etc/sudoers.d/tpanel-mysql让 tpanel 免密 sudo mysql - system.py
create_mysql_db/delete_mysql_db改用:subprocess list参数(不是 shell=True)sudo mysql -e "{stmt}"提权re.match(r'^[a-zA-Z0-9_]+$', name)校验 name/user 防 SQL 注入
📦 安装
wget -O install.sh https://github.com/zhang-pu/tpanel/releases/download/v1.3.8/install.sh bash install.sh或官网:
wget -O install.sh https://tpanel.cn/install.sh bash install.sh🔄 升级(从 v1.3.0 ~ v1.3.7)
- 重新
bash install.sh(会保留/opt/tpanel现有数据) - 首次访问用
Ctrl+Shift+R硬刷新(跳过浏览器缓存)
⚠️ 兼容性
- 100% 向后兼容
- 不需要手动重启服务
- 老用户升级后所有功能正常
🔒 已知问题(v1.3.9+ 修复)
- per-site PHP-FPM pool 缺失:当前所有网站共用一个 PHP-FPM pool(跑 www-data),写文件需要
chmod o+rw。v1.3.9+ 会为每个网站创建独立 PHP-FPM pool。
🙏 致谢
10 小时挖 8 bug,献给所有在生产服务器上跑过 TPanel 但没敢删系统重装的人。
完整变更日志: https://github.com/zhang-pu/tpanel/compare/v1.3.1...v1.3.8
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
install.sh
0 downloads · 11 KiB
-
tpanel-v1.3.8-source.zip
1 download · 47 KiB
- install.sh ExecStart:
mirror of
https://github.com/zhang-pu/tpanel.git
synced 2026-10-02 16:29:29 +08:00