v1.0.1
最新 安全更新 新功能 2026-10-26主题:在线更新体系 + 面板密码安全修复
⚙️ 服务总开关(新功能)
v1.0.0 有个隐藏死锁:服务一旦被停掉,LuCI 概览页所有按钮全部失效——因为它们都去调
:9099 的 API,而面板已经没了;「启用透明代理」那个勾选框只管流量接管、不管进程启停,
用户勾了也没用,只能 SSH 进去手动 start。
- ● 状态徽章:运行中 / 部分运行 / 已停止
- ● 元信息:开机自启 · 代理接管 · nftables · 端口
- ● 按钮:启动 / 停止 / 重启 / 开机自启
- ● 每 5 秒自动同步真实状态
关键设计:这条通路不依赖 :9099。
它走 LuCI 自己的 fs.exec →
/etc/init.d/ai-link svc_state|start|stop|restart,
所以即使守护进程已经停了,也能在网页上一键把它拉起来,完全不需要 SSH。
语义澄清:⚙️ 服务总开关 管进程生命周期; ☑️ 启用 AI-LINK 透明代理服务 只管是否接管流量。两者独立。
🔐 安全修复
- ●LuCI 概览页「面板密码」显示为一串
sha256:xxxx哈希根因有两层:改密后 UCI 字段被写入哈希;而更关键的是--self-test用临时目录跑改密回归时,函数体无条件uci set,导致每次安装自检或ai-link probe都会把生产环境的面板密码字段覆盖成测试串的哈希。 - ●哈希串可直接当密码登录已移除「提交值等于 UCI 字段值即放行」的旁路,UCI 里只有明文初始密码才允许直通比对。
- ●哈希串可直接当 Bearer 令牌绕过登录令牌现在只认
panel_auth.json/panel_token里签发过的值,无法再用面板回显的内容绕过/api/login。 - ●认证文件丢失后用户被彻底锁死旧逻辑会用哈希当初始密码重建,真实密码直接失效。现在回退到默认密码,用户可进面板重设。
- ●新增 LuCI 专用桥接令牌
luci_bridge_token与面板密码完全解耦的 32 位随机串,仅用于 LuCI 页面调用面板 API。改面板密码不影响它,它也不能用来登录面板。 - ●
ai-link password不再回显明文密码
⬆️ 在线更新体系(新功能)
- ●LuCI 概览页新增「插件版本与在线更新」卡片:当前版本、检查更新、立即更新、进度条、实时日志、更新说明入口。
- ●独立控制面板新增同款卡片,位于「核心规则库与订阅更新」上方。
- ●新增 CLI:
ai-link update检查版本,ai-link update --apply直接在线升级并输出实时进度。 - ●新增 API 端点
方法 路径 说明 GET /api/system/version 当前版本、构建号、清单源 GET /api/system/update/check 拉取清单并比较版本 GET /api/system/update/status 升级进度与最近日志 POST /api/system/update/apply 启动升级 POST /api/system/update/ack 清除已完成的升级结果
- 1. 拉取
version.json(Pages 主源 → 加速镜像 → GitHub 直连,自动重试) - 2. 下载升级包(清单内多源依次重试)
- 3. 校验大小 + MD5 + SHA256,不符立即中止
- 4. 解压并校验包结构
- 5. 备份用户配置(保留最近 3 份),空间充足时备份旧代码
- 6. 执行
install.sh --upgrade - 7. 重启并做健康检查
- 8. 失败自动回滚并再次验证
升级进程与主服务解耦:升级脚本用 setsid 脱离主进程会话,安装脚本重启服务不会把它杀掉;进度实时落盘,重启后新进程接着读,所以你能看到完整的升级结果而不是“页面转圈然后失联”。
🛠 安装脚本与版本号
- ●
install.sh --upgrade升级模式:不再停止其他代理服务、不再删除音乐解锁等附加组件,其余流程保持幂等。 - ●全量版本号统一为
1.0.1,以主程序内APP_VERSION常量为唯一来源。
# 方式一:面板 / LuCI 点「检查更新」→「立即更新」
# 方式二:SSH 命令行
ai-link update # 只检查
ai-link update --apply # 检查并升级
⚠️ v1.0.0 用户请手动升级一次到 v1.0.1(v1.0.0 尚未内置在线更新模块);从 v1.0.1 起后续版本均可在线一键升级。