审核标准
提交自动校验(前置拦截)
触发时机: 开发者平台新增版本后实时执行。校验失败直接拦截,不生成审核工单,不进入初审。
校验覆盖范围:
config.ini 校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| JSON 语法合法(无注释、无尾随逗号、无双引号外单引号) | 使用 python3 -m json.tool 校验 | 8.4 config.ini 规范 |
| 无单引号、无行内注释 | JSON 标准仅允许双引号,// 或 /* */ 均视为注释 | 8.4 config.ini 规范 |
| 必填字段完整(id/version/system_id/package/platform/type/name/icon/path 等) | 对照必填字段清单逐项检查 | 8.4.3 关键规则 |
| type 与 open_path 互斥(两者不可同时存在) | Docker 应用使用 type 字段,Deb 应用使用 open_path 字段 | 8.4.2 字段参考 |
path 字段必须使用 ${ip} 占位符,禁止写死 IP 或域名 | 所有 URL 类 path 必须以 https://${ip}:端口/ 格式书写 | 8.4.3 关键规则 |
| version / system_id / package 三者版本号一致 | config.ini、DEBIAN/control(或 Docker compose 标签)、app.lang 三处版本号必须统一 | 4.2 版本号规范 |
| platform 字段与实际提交包架构匹配 | 如 platform 声明 x86_64 则包内二进制必须为 x86_64 架构 | 8.4.2 字段参考 |
app.lang 校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| 14 种语言节点全部存在(key 完整) | 缺失任一语种节点直接拦截 | 8.5 app.lang 规范 |
| 所有语种的 name / descript 字段非空 | 空字段必须填充英文翻译,不允许空白字符串 | 8.5.3 Field Descriptions |
| 文件编码 UTF-8 无 BOM | 文件头不允许出现 EF BB BF 字节 | 8.5.5 File Encoding & Format |
| 换行符全部为 LF(\n),禁止 CRLF(\r\n) | 跨平台协作常见问题,Windows 开发者须额外注意 | 4.6 跨平台换行规范 |
资源文件校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| 图标格式为 SVG | 不接受 PNG/JPG/ICO 等位图格式 | 8.6 应用图标 |
| SVG 透明背景、viewBox 规范 | viewBox 属性必须存在且数值合理 | 8.6 应用图标 |
| 图标文件路径与 config.ini 中 icon 字段完全匹配 | 包括大小写和目录层级 | 8.6 应用图标 |
| 所有脚本文件(.sh/.py/.pl)禁止 CRLF 换行 | 统一使用 LF 换行符 | 4.6 跨平台换行规范 |
包结构校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| 双包数据包(data.tar.gz)禁止包含二进制可执行文件(DEBIAN 目录下 postinst/preinst 等生命周期脚本除外) | 业务程序、运行时二进制不可出现在数据包中 | 8.17 双包模式规范 |
| 目录名大小写合规(全小写,与 config.ini 中声明一致) | Linux 文件系统大小写敏感 | 8.2 通用目录结构 |
依赖校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
Docker 应用 depend 字段必须包含 DockerEngine | 缺少则应用安装时无法确保 Docker 环境就绪 | 5.2 声明运行时依赖 |
版本规则校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| 版本号严格大于上一已上架版本(如 1.0.1 > 1.0.0) | 禁止版本回退或重复提交 | 4.2 版本号规范 |
版本号不含 beta / alpha / rc 等非正式后缀 | 正式上架版本必须去除预发布标识 | 4.2 版本号规范 |
哈希校验
| 检查项 | 说明 | 对应章节 |
|---|---|---|
| 上传包的 SHA-256 与提交时声明的 sha256 完全匹配 | 防止传输损坏或人为篡改 | 8.15 打包与校验 |
结果通知: 自动校验失败仅弹窗提示错误说明与文档链接,不生成审核工单。开发者修复后重新提交,重新触发自动校验。全部通过后方可进入 2 人工审核流程。
四大审核维度
| 维度 | 审核内容 | 审核人 |
|---|---|---|
| 配置完整性 | config.ini JSON 格式正确、app.lang 14 种语言齐全、图标 SVG 规范、必填字段无缺失、systemd 服务文件有效 | 专职审核人员 |
| 功能可用性 | 安装/启动/停止/卸载完整无异常、架构适配正确、功能与描述一致、端口可用无冲突 | 测试支持人员 |
| 安全性 | 无硬编码凭据、非 root 运行、无特权模式、无恶意代码、无漏洞、无违规脚本、哈希值校验通过 | 技术支持人员 |
| 合规性 | 内容合法合规、不侵犯知识产权、描述与功能相符、仓库为公开状态、目录结构规范 | 专职审核人员 |
配置完整性 — 细分检查清单
config.ini:
- JSON 无注释(
//、/* */)、无尾随逗号 - 无单引号,所有字符串使用双引号
- 必填字段完整:
id/version/system_id/package/platform/type/name/icon/path等 type与open_path互斥:Docker 应用仅用type,Deb 应用仅用open_pathpath字段必须使用${ip}占位符,禁止写死 IP、域名或 localhostversion/system_id/package三者版本号一致platform字段与实际提交包架构匹配- 参见 8.4 config.ini 规范
app.lang:
- 14 个语种节点全部存在(en/zh-CN/zh-HK/ja/ko/fr/de/es/it/pt/ru/ar/th/vi)
- 所有语种的
name/descript字段非空,空字段必须填充英文翻译 - 文件编码 UTF-8 无 BOM
- 换行符全部 LF(
\n),禁止 CRLF(\r\n) - 参见 8.5 app.lang 规范
图标:
- SVG 格式,透明背景
- 包含规范的
viewBox属性 - 图标文件路径与 config.ini 中
icon字段完全匹配(大小写一致) - 参见 8.6 应用图标
systemd(仅 Deb 应用):
User/Group为非 root 专属用户- 包含
StartLimitInterval/StartLimitBurst启动限制参数 - 包含
ProtectSystem=strict或ProtectSystem=full系统保护参数 - 建议包含
NoNewPrivileges=yes/PrivateTmp=yes等安全加固参数 - 参见 8.12 Systemd 服务规范
功能可用性 — 细分检查清单
- 安装流程:无报错、无依赖缺失(
command not found)、非预装依赖已打包 - 启动:服务正常启动、端口监听正常、systemd 状态 active
- 停止:服务正常停止、无僵尸进程残留
- 卸载:完全清理安装目录和 service 文件、无残留配置
- 架构适配:x86_64 / aarch64 双架构分别测试通过
- 功能与描述一致:
app.lang中descript描述的功能均可实际使用 - 端口检查:不占用 TOS 系统保留端口,不与其他已安装应用冲突
- UI 可用性(如有):Web 界面正常打开、页面无 JS 报错、首次加载时间 ≤ 5 秒
- 参见 13 本地测试与调试
安全性 — 细分检查清单
- 运行权限: User/Group 为非 root,禁止
--privileged特权模式 - 凭据扫描: 无硬编码密码、API Key、Token、数据库连接字符串
- 网络行为:
- Deb 脚本(postinst/postrm 等)禁止联网执行
apt install、pip install、curl | bash等操作 - Docker 应用禁止
network_mode: host(容器网络隔离) - 端口映射合理,不暴露不必要的端口
- Deb 脚本(postinst/postrm 等)禁止联网执行
- 镜像来源: Docker 应用镜像必须来源于 Docker Hub,禁止使用 ghcr.io、quay.io、私有仓库等非 Docker Hub 镜像
- 文件权限: 禁止读写
/etc、/root、/boot等系统敏感目录 - 代码扫描: 无恶意代码(反弹 shell、挖矿程序、数据窃取)、无已知 CVE 高危漏洞
- 日志安全: 不输出密码、序列号、Token 等敏感信息到日志
- 哈希校验: 所有审核岗位接收包后必须先验证 SHA-256 与基准一致
- 参见 11.3 安全审计要求
合规性 — 细分检查清单
- 内容合法:不包含违法、暴力、色情、赌博等内容
- 知识产权:不侵犯 TerraMaster 或第三方商标、专利、著作权
- 描述一致性:
app.lang中 name/descript 与实际功能一致,无夸大宣传 - 仓库状态:GitHub/Gitee 仓库为公开状态,README 完整
- 目录结构:符合 8.2 通用目录结构,无冗余、违规文件
- 开源协议:如使用开源代码,须遵守其许可证要求并在包内声明
- 隐私合规:不违规采集用户数据、不未经授权上传数据
- 参见 15.2 仓库要求
审核流程
1.初审阶段
- 专职审核人员登录应用管理平台(https://mgmt.terra-master.com),领取"待初审"任务
- 下载待审核的应用包,获取基准 SHA-256 哈希值并记录
- 验证信息一致性:开发者提交的应用信息与 GitHub/Gitee 仓库内容一致
- 验证仓库规范性:仓库为公开状态、目录结构完整、无冗余违规文件
- 知识产权合规检查:不侵犯 TerraMaster 或第三方知识产权
初审结果:
- ✅ 通过 → 应用状态更新为"待人工审核",进入人工审核阶段
- ❌ 驳回 → 详细填写驳回原因,双渠道通知开发者整改
2.哈希值流转验证
所有审核岗位人员在接收应用包后,必须先验证哈希值与基准哈希值一致,方可开展审核工作。哈希值异常立即暂停并排查。
3.人工审核阶段
按以下顺序进行:
- 技术支持人员 → 安全性审核(安全扫描、代码安全、网络安全、数据合规)
- 测试支持人员 → 功能与兼容性审核(安装/启停/卸载测试、架构适配、功能完整性)
- 专职审核人员 → 合规性与内容审核、用户体验与文档质量审核
各岗位出具明确的审核意见(通过/驳回及具体原因),由专职审核人员汇总形成综合审核结果。
一票否决项(出现任意一项直接驳回,无需继续审核)
- 应用以 root 用户运行
- Docker 应用使用特权模式(
--privileged) - Docker 应用
network_mode: host(容器网络隔离违规) - 检测到恶意代码或数据窃取行为
- 应用 ID 与已有应用重复
- 数据包(
<appid>.deb)包含二进制可执行文件(DEBIAN/目录下的生命周期脚本 postinst/preinst/postrm/prerm 除外) - 校验和不匹配
- app.lang 存在任意语种
name或descript字段为空 - config.ini 使用单引号或包含行内注释
- 提交包架构与 config.ini 中
platform字段不匹配
常见驳回原因(按频次排序)
| 排名 | 驳回原因 | 整改建议 | 适用场景 | 对应章节 |
|---|---|---|---|---|
| 1 | config.ini 包含注释、语法错误或字段缺失(此问题在自动校验阶段即会拦截,开发者提交后会立即收到提示。) | 移除所有注释,用 python3 -m json.tool 校验 JSON 格式 | 全应用通用 | 8.4 config.ini 规范 |
| 2 | app.lang 缺少语言节点或字段为空 | 补充全部 14 种语言,未翻译的用英文填充 | 全应用通用 | 8.5 app.lang 规范 |
| 3 | Docker compose 镜像来源非 Docker Hub | 将镜像托管到 Docker Hub,禁止使用 ghcr.io / 私有仓库 | 仅 Docker | 9.4 镜像与安全要求 |
| 4 | 仓库非公开或资源缺失 | 设为公开仓库,上传完整资源(README/源码/配置) | 全应用通用 | 15.2 仓库要求 |
| 5 | 应用功能描述与实际功能不符 | 修正 app.lang 中的 descript 字段,确保描述可验证 | 全应用通用 | 8.5.3 Field Descriptions |
| 6 | id 字段重复 | 使用全局唯一的应用 ID,提交前在平台搜索确认 | 全应用通用 | 8.4.2 字段参考 |
| 7 | 图标格式不符合要求或路径不匹配 | 使用 SVG 格式(透明背景 + viewBox),路径与 config.ini icon 完全一致 | 全应用通用 | 8.6 应用图标 |
| 8 | Deb 包服务无法启停或卸载残留 | 完善 systemd 服务文件和 preinst/postinst/postrm 生命周期脚本 | 仅 Deb | 8.12 Systemd 服务规范 |
| 9 | Docker 端口冲突、无数据持久化 | 确认端口不与系统保留端口冲突,添加 volumes 卷挂载 | 仅 Docker | 9.3 docker-compose.yml 规范 |
| 10 | 版本号未递增 | 新版本号必须严格大于前一版本,禁止回退或重复提交 | 全应用通用 | 4.2 版本号规范 |
| 11 | Deb 包以 root 运行 | 创建专用非 root 用户(UID ≥ 1000),systemd 中指定 User/Group | 仅 Deb | 8.12 Systemd 服务规范 |
| 12 | 脚本执行失败,报 bad interpreter | 检查文件换行符,确保所有 .sh 文件使用 LF 换行(非 CRLF),可用 dos2unix 批量转换 | 全应用通用 | 4.6 跨平台换行规范 |
| 13 | 依赖未预装,报 command not found | 改用 Go/Python 实现或打包静态依赖,禁止依赖系统未预装的 Node.js/Java 等环境 | 仅 Deb | 2.4 系统预装依赖说明 |
| 14 | Docker 应用使用特权模式 | 移除 privileged: true,改用 cap_add 细粒度权限 | 仅 Docker | 9.4 镜像与安全要求 |
| 15 | 校验和不匹配或缺少校验和文件 | 重新生成 SHA-256 校验和,确保上传包与提交声明一致 | 全应用通用 | 8.15 打包与校验 |
| 16 | config.ini / DEBIAN/control / app.lang 版本号不一致 | 统一三处版本号,建议用脚本自动同步 | 全应用通用 | 4.2 版本号规范 |
| 17 | Docker 应用 network_mode: host | 移除 network_mode: host,使用 bridge 网络 + 端口映射 | 仅 Docker | 9.4 镜像与安全要求 |
| 18 | 提交包架构与 platform 字段不匹配 | 确保 config.ini 中 platform 与包内二进制架构一致(x86_64 / aarch64) | 全应用通用 | 8.4.2 字段参考 |
| 19 | app.lang 存在空 name/descript(某语种) | 所有语种的 name 和 descript 必须填充,未翻译语种用英文填充 | 全应用通用 | 8.5.3 Field Descriptions |
| 20 | config.ini 使用单引号或包含行内注释 | JSON 仅允许双引号字符串,移除所有 // 或 /* */ 注释 | 全应用通用 | 8.4 config.ini 规范 |
驳回整改流程
- 审核不通过 → 系统通过「平台消息 + 注册邮箱」双渠道通知开发者
- 开发者登录开发者平台查看驳回原因和整改建议
- 开发者须在 30 天内 修正问题并重新提交
- 超过 30 天未重新提交 → 提交自动关闭
- 连续 3 次自动校验失败或人工审核驳回均计入驳回次数;连续 3 次驳回后,平台自动生成客服咨询工单(非审核工单),由技术专员一对一协助整改
- 整改成功提交新版本后,连续驳回计数自动清零:开发者完成整改、提交新版本并通过审核后,历史驳回次数归零,不再累计
- 整改后重新提交 → 更新版本号,以新版本名义重新进入审核流程
永久限制条款:
出现以下任一情形,平台将 永久关闭 该开发者的应用提交通道:
- 多次提交恶意应用(含病毒、木马、挖矿程序、勒索软件等)
- 多次提交侵犯第三方知识产权的应用
- 被举报并核实存在数据窃取、后门等严重安全违规行为
- 避免或伪造审核材料(虚假仓库、伪造校验和、冒用他人身份等)
永久限制为不可逆处罚,平台将通过邮件发送正式通知并附证据说明。开发者可在 15 个工作日内通过平台申诉渠道提交复议申请。
审核时效
| 阶段 | 预计耗时 | 说明 |
|---|---|---|
| 自动校验 | 实时 | 提交后即时完成 |
| 初审 | 1-2 个工作日 | 信息一致性与仓库规范验证 |
| 人工审核 | 3-5 个工作日 | 安全/功能/合规全面审核 |
| 上架发布 | 1-2 个工作日 | 审核通过后上架至应用中心 |
总审核周期通常为 5-8 个工作日。从提交到初审结果通常为 1-2 个工作日,可登录开发者平台实时查看进度。高峰期可能延长,请提前规划提交时间。