Skip to content

管理员指南

本指南面向 Ocean CTF 平台的管理员,介绍如何使用管理后台进行平台管理、题目管理、比赛管理等操作。

登录管理后台

访问地址

管理后台地址:http://your-domain/admin

默认账号

首次部署后,使用以下默认账号登录:

  • 用户名admin
  • 密码:在 .env 文件中配置的 FIRST_SUPERUSER_PASSWORD,默认admin

安全提示

首次登录后,请立即修改默认密码!

用户管理

查看用户列表

  1. 登录管理后台
  2. 点击左侧菜单 用户管理用户列表
  3. 可以查看所有注册用户的信息

用户操作

  • 编辑用户:点击操作列的"编辑"按钮,可以修改用户信息
  • 禁用用户:点击"禁用"按钮,禁止用户登录
  • 删除用户:点击"删除"按钮,永久删除用户(谨慎操作)
  • 重置密码:点击"重置密码"按钮,为用户生成新密码

队伍管理

队伍用于组织参赛成员参与比赛(尤其是团队赛/攻防赛等)。

查看队伍列表

  1. 进入 用户管理队伍管理
  2. 查看队伍信息(队伍名称、队长、成员数量、创建时间等)

队伍操作

  • 查看队伍详情:查看队伍成员、队伍信息
  • 编辑队伍:修改队伍名称、描述等信息
  • 解散/删除队伍:谨慎操作,可能影响比赛参与数据

批量导入队伍

当需要为学校/企业/活动快速初始化大量队伍时,可以使用批量导入。

  1. 进入 用户管理队伍管理
  2. 点击"批量导入"按钮
  3. 按模板准备导入文件(通常为 CSV/Excel,字段以页面提示为准)
  4. 上传并确认导入结果

提示

批量导入前建议先导出一份示例模板,在示例基础上填充数据,避免字段不匹配导致导入失败。

赛事管理

赛事管理用于创建比赛、配置赛制与题目、管理参赛权限与数据导出等。

比赛类型

1. 理论赛

选择题、填空题等理论知识考核。

  • 题目类型:单选、多选、填空、简答
  • 自动评分:系统自动判分
  • 限时答题:可设置答题时间限制

2. 解题赛(CTF)

传统的 CTF 解题模式,用户通过解题获得分数。

  • 计分方式:固定分值 / 动态分值
  • 排行榜:实时更新
  • 一血奖励:首个解出题目的用户额外加分
  • 题目类型:Web / Pwn / Reverse / Crypto / Misc / Mobile
  • 环境类型 静态题目/容器化

3. 攻防赛(AWD)

攻防兼备的比赛模式,每个队伍维护自己的靶机,同时攻击其他队伍。

  • 靶机分配:自动为每个队伍分配靶机
  • Flag 轮转:定时更换 Flag
  • 攻击检测:记录攻击日志
  • 防御检测:检查服务可用性

创建比赛

  1. 进入 比赛管理比赛列表
  2. 点击"新建比赛"按钮
  3. 填写比赛信息:
    • 比赛名称:比赛标题
    • 比赛描述:比赛说明(支持 Markdown)
    • 开始时间:比赛开始时间
    • 结束时间:比赛结束时间
    • 参赛模式: 个人赛/团体赛
    • 比赛类型:解题赛 / 攻防赛 / 理论赛 / 混合
    • 是否公开:是否允许所有用户参加
    • 开放注册:是否允许访客加入(需要审核)
  4. 点击"提交"保存

赛事详情

创建比赛后,进入比赛详情页可对赛事进行日常管理,包括公告、关卡、成绩单、参赛单位、WP、管理员等。

赛事详情页

公告

用于向参赛者发布赛事相关通知(例如赛程说明、环境变更、已知问题、临时规则等)。

  1. 进入比赛详情页 → 公告
  2. 点击"新建公告"
  3. 填写公告标题与内容
  4. 选择是否置顶/是否立即发布(以页面为准)
  5. 保存后公告会展示在选手侧赛事页面

关卡

用于组织赛事的阶段/关卡结构(例如初赛/复赛、阶段一/阶段二、不同题目集等)。

  1. 进入比赛详情页 → 关卡
  2. 点击"新建关卡"
  3. 配置关卡名称、开放时间/关闭时间、排序等
  4. 在关卡内添加题目或调整题目顺序(以页面为准)
动态环境与模板选择

关卡中通常会包含不同类型的题目:

  • 静态题目:无需启动环境,直接在题目中配置 Flag 与附件即可
  • 动态环境题目:需要为参赛者启动独立容器环境(例如 Web 靶机、漏洞复现环境等)

当关卡内包含动态环境题目时,需要先准备好对应的环境模板:

  1. 在题目中选择/绑定对应的容器模板或漏洞环境模板(以页面为准)
  2. 将题目加入到关卡后,参赛者在比赛页面可按题目启动靶机

容器模板的创建与配置请参考:容器模板管理

提示

建议先完成“虚拟化环境配置”,并至少创建 1 个可正常启动的容器模板,再进行关卡与动态题目编排。

提示

如果比赛类型为混合赛制,建议通过关卡划分不同模块,方便参赛者理解与组织。

成绩单

用于查看与导出比赛结果数据(排行榜、提交记录、各题解题情况等)。

  1. 进入比赛详情页 → 成绩单
  2. 查看实时排行榜与统计
  3. 如需留档,可导出数据(CSV/Excel 等,以页面为准)

参赛单位

用于管理参赛单位/组织(例如学校、班级、企业部门等),常用于团体赛报名与统计。

  1. 进入比赛详情页 → 参赛单位
  2. 新建参赛单位或编辑单位信息
  3. 为单位绑定参赛队伍/成员(以页面为准)

WP

用于收集与管理参赛者提交的 WriteUp(题解/复盘)。

  1. 进入比赛详情页 → WP
  2. 查看提交列表
  3. 审核/发布/导出(以页面为准)

管理员

用于给比赛分配管理人员,支持按比赛维度授权(例如只允许管理自己负责的比赛)。

  1. 进入比赛详情页 → 管理员
  2. 添加管理员用户
  3. 保存后该管理员可在后台看到并管理该比赛

添加题目到比赛

  1. 编辑比赛
  2. 在"题目列表"部分,点击"添加题目"
  3. 选择要添加的题目
  4. 配置题目在比赛中的分值(可选)
  5. 保存

比赛权限管理

公开比赛

所有注册用户都可以参加。

邀请制比赛

  1. 创建比赛时,取消勾选"公开比赛"
  2. 进入比赛详情页
  3. 点击"邀请用户"按钮
  4. 选择要邀请的用户或团队
  5. 发送邀请

比赛监控

  1. 进入比赛详情页
  2. 查看实时数据:
    • 参赛人数:当前参赛用户数
    • 解题情况:各题目的解题人数
    • 排行榜:实时排名
    • 提交记录:所有 Flag 提交记录

比赛结束后

  1. 比赛自动结束,用户无法继续提交
  2. 导出比赛数据:
    • 排行榜:导出为 CSV 或 Excel
    • 解题记录:导出所有提交记录
    • WriteUp:收集参赛者的题解

理论题管理

理论题管理用于维护平台的理论题题库,并为"理论赛"提供可复用的题目来源。通过理论题管理,你可以统一管理题干、选项、正确答案、解析与分值,并在赛事中快速组卷与发布。

同时,理论题管理还提供了配套的数据能力:

  • 成绩单:查看参赛者提交记录与判分结果
  • 统计分析:查看题目正确率、选项分布、答题耗时等,用于赛后复盘与题库优化

理论题类型

理论题用于理论赛的题库建设与考试组织。

  • 单选题:从多个选项中选择唯一正确答案
  • 多选题:从多个选项中选择一个或多个正确答案
  • 填空题:填写简短文本作为答案
  • 简答题:提交较长文本(通常需要人工或规则辅助评阅)

创建理论题

1. 新建题目

  1. 进入 理论题管理理论题列表
  2. 点击"新建"按钮
  3. 选择题型并填写题干、选项与答案(以页面为准)
  4. 设置分值、解析(可选)
  5. 保存后即可在理论赛中引用该题

成绩单与统计

理论题的提交记录与统计通常在:

  • 理论题管理成绩单:查看理论赛提交与评分结果
  • 理论题管理统计分析:查看题目正确率、答题分布等

CTF练兵场

CTF练兵场用于日常训练与题库运营。管理员可以在这里维护 CTF 关卡(题目),并支持静态题目与容器化题目两种形态。

CTF关卡列表

  1. 进入 CTF练兵场CTF关卡列表
  2. 查看关卡状态(草稿/发布/隐藏等,以页面为准)、分类、分值与创建时间

创建CTF关卡

  1. 进入 CTF练兵场CTF关卡列表
  2. 点击"创建CTF关卡"按钮
  3. 填写题目基础信息(名称、分类、描述、分值等)
  4. 选择环境类型:
    • 静态题目:直接配置 Flag 与附件
    • 容器化题目:为每个参赛者启动独立环境
  5. 点击"提交"保存

容器化题目(动态环境)

当题目选择"容器化"时,需要绑定容器模板:

  1. 在题目编辑页的"容器配置"中选择容器模板
  2. 配置容器参数(如生存时间、最大实例数等,以页面为准)
  3. 保存后,选手侧可通过"启动靶机"进入题目环境

容器模板的创建与配置请参考:容器模板管理

容器实例

容器化题目运行后,会产生容器实例,可用于排障与运维:

  1. 进入 CTF练兵场容器实例(或 虚拟化管理容器实例,以页面为准)
  2. 查看实例状态、端口映射与运行日志
  3. 必要时可重启或停止实例(谨慎操作)

动态靶场管理

容器模板管理

Ocean CTF 支持基于 Docker 的动态靶场,可以为每个用户启动独立的靶机环境。

创建容器模板

  1. 进入 虚拟化管理容器模板
  2. 点击"新建模板"按钮
  3. 填写模板信息:
    • 模板名称:如 "Web 靶场 - SQL 注入"
    • 镜像名称:Docker 镜像,如 mysql:5.7
    • 端口映射:容器端口映射规则
    • 环境变量:容器环境变量(可选)
    • 启动命令:容器启动命令(可选)
  4. 点击"提交"保存

端口映射配置

端口映射格式:容器端口:协议

示例:

80:http
3306:tcp

系统会自动为每个用户分配随机的宿主机端口。

关联题目与容器

  1. 编辑题目
  2. 在"容器配置"部分,选择容器模板
  3. 配置容器参数:
    • 生存时间:容器自动销毁时间(分钟)
    • 最大实例数:每个用户最多可启动的容器数量
  4. 保存题目

用户答题时,点击"启动靶机"按钮即可获得独立的靶机环境。

容器实例管理

  1. 进入 虚拟化管理容器实例
  2. 可以查看所有运行中的容器实例
  3. 支持的操作:
    • 查看日志:查看容器运行日志
    • 重启容器:重启容器实例
    • 停止容器:停止并删除容器

漏洞复现

Vulhub 题库

Ocean CTF 内置了 Vulhub 漏洞复现环境题库,可以一键导入真实漏洞环境。

漏洞复现环境列表

同步 Vulhub 题库

  1. 进入 漏洞复现漏洞环境
  2. 点击"同步漏洞模板"按钮
  3. 系统会自动从 GitHub 拉取最新的 Vulhub 题库
  4. 等待同步完成

提示

同步可能需要几分钟时间,请耐心等待。

自定义漏洞环境

除了 Vulhub 题库,你也可以创建自定义的漏洞环境:

  1. 准备 Docker Compose 配置文件
  2. 创建容器模板,配置多服务编排
  3. 关联到题目

虚拟化

平台的 动态靶场漏洞复现 功能依赖虚拟化能力。首次部署并登录管理后台后,建议优先完成虚拟化相关配置,避免后续创建题目或导入漏洞环境时出现容器无法启动等问题。

主机类型与环境类型

虚拟化管理包含两层概念:

  • 主机类型:环境实际运行的宿主资源来源。平台支持多种主机类型,用于承载不同环境:
    • Docker:适用于容器化环境(最常用)
    • PVE(Proxmox VE):适用于需要虚拟机隔离的场景(例如更强隔离/更贴近真实系统环境)
  • 环境类型:题目/模板所使用的运行形态。
    • 静态环境:不启动容器,直接在题目中配置 Flag 与附件
    • 容器化环境:基于模板启动容器(动态靶场、漏洞复现等都属于此类)

不同主机类型常见差异(以页面字段为准):

  • Docker 主机
    • endpoint 通常为 Docker API 地址(例如 unix:///var/run/docker.socktcp://host:2375
    • out_ip 用于生成题目对外访问地址(非常关键)
  • PVE 主机
    • endpoint 通常为 PVE API 地址(例如 https://host:8006
    • 通常需要配置 username/passwordapi_key 用于鉴权

Docker Compose(多服务编排)

平台支持将 docker-compose.yml 作为模板来源,用于一键启动多服务环境(例如 Web + DB + Cache)。

使用 Compose 模板时建议关注:

  • 入口服务:确定参赛者访问的入口服务(通常是 Web 服务)以及其对外端口
  • 端口声明:Compose 中的 ports 用于识别可访问端口;对外端口仍由平台在主机端口范围内自动分配
  • 资源声明:可在 Compose 服务中声明 CPU/内存需求(平台会按主机默认/上限裁剪)
  • 网络与依赖:多服务需要正确的网络互联与依赖顺序(按 Compose 配置为准)

提示

无论是 CTF 练兵场的容器化题目,还是漏洞复现的漏洞环境,本质上都会落到“容器化环境 + 主机节点”上。

前置条件

  • Docker 环境:确保后端所在机器已安装 Docker,并且 Docker 服务正常运行
  • 权限:后端进程需要具备访问 Docker 的权限(容器化部署时通常需要挂载 /var/run/docker.sock
  • 网络连通性:后端可拉取镜像(能访问 Docker Hub 或自建镜像仓库)

配置主机节点

  1. 进入 虚拟化管理主机管理
  2. 点击"新增主机"
  3. 填写主机信息(按页面提示配置即可)
  4. 保存后在列表中查看主机状态是否为"在线/可用"

提示

如果你的部署是单机模式,通常只需要添加当前后端所在机器作为主机节点即可。

出口配置(重要)

“出口配置”用于控制容器环境对外提供服务时的访问方式,常见场景包括:

  • 选手访问题目环境的 Web 服务
  • 容器环境需要对外暴露端口(HTTP/HTTPS/TCP)
  • 平台部署在反向代理/NAT 之后,需要正确生成访问地址

建议在虚拟化主机或全局配置中明确:

  • 对外域名/访问入口:对外访问使用的域名(例如 https://ctf.example.com
  • 端口映射范围:宿主机用于分配给容器的端口段
  • 访问协议:HTTP/HTTPS(若走 HTTPS,证书通常由外部网关/反向代理负责)

注意

如果出口配置不正确,常见现象是“容器已启动但访问地址打不开 / 地址生成错误 / 端口被占用”。

资源限制

为避免单个题目占用过多资源影响整个平台,建议为主机设置资源上限与默认值:

  • 主机总资源:总内存(MB)、总 CPU(核数)、最大容器数量
  • 端口范围:端口范围起始/结束(用于自动分配对外端口)
  • 单容器默认资源:默认内存(MB)、默认 CPU(核数)
  • 单容器最大资源:最大内存(MB)、最大 CPU(核数)
  • 容器生命周期:默认存活时间(TTL,秒)、最大 TTL

提示

平台会根据“服务在模板中声明的资源”与“主机配置默认/最大值”综合计算容器最终限制,避免超额。

模板资源

容器模板可为每个服务声明资源需求(如 CPU/内存)。一般优先级为:

  1. 模板内服务声明的资源(如果有)
  2. 主机默认资源
  3. 平台兜底默认值

当模板请求资源超过主机允许的最大值时,会自动按主机上限进行限制。

运行时

运行时指容器真正启动与运行阶段的行为与运维能力,常见关注点包括:

  • 启动与销毁:按 TTL 自动销毁过期容器,减少资源占用
  • 日志查看:通过容器实例查看运行日志定位错误
  • 重启/停止:必要时手动重启或停止实例(谨慎操作)
  • 容量规划:通过资源限制与最大容器数控制平台承载能力

镜像拉取与仓库设置

  • 公共镜像:默认从 Docker Hub 拉取(需要网络可访问)
  • 私有仓库:如使用私有镜像仓库,请在部署侧配置好登录凭据或镜像加速

连通性与权限检查

完成主机配置后,建议做一次快速验证:

  • 能否创建容器:后续在创建容器模板/漏洞环境模板时,能正常拉取镜像并启动容器
  • 日志可用:在 虚拟化管理容器实例 中能查看日志
  • 端口映射正常:靶机启动后可正常访问分配的端口

管理员管理

管理员账号本质上也是用户账号,但管理员权限与平台功能绑定更紧密,建议单独按"管理员管理"流程进行配置。

创建管理员

  1. 进入 管理员管理管理员列表
  2. 点击"新建管理员"(或在用户列表中选中用户后提升权限,具体以页面为准)
  3. 为管理员分配角色
  4. 保存后使用该账号登录管理后台

提示

权限控制以"角色"为核心。不同角色对应不同管理能力;超级管理员可管理角色与权限。

角色管理

进入 管理员管理角色管理 查看与维护角色。

系统内置角色(不可随意删除/修改)通常包括:

  • superadmin(超级管理员):拥有全部管理权限,可管理用户、角色、比赛、题目、队伍等
  • admin(管理员):可管理比赛、题目、队伍等日常运营能力
  • tenant(租户管理员):通常用于多租户场景,偏向"管理自己创建的比赛"与题目维护
  • player(选手):普通参赛角色,仅具备参与比赛相关权限

提示

如需更细粒度的权限控制,可以创建自定义角色并分配权限(仅超级管理员可创建/修改/删除角色)。

系统设置

基础配置

  1. 进入 系统管理系统配置
  2. 配置平台基础信息:
    • 平台名称:显示在页面标题
    • 平台 Logo:上传平台 Logo
    • 平台描述:首页显示的描述文字
    • 联系邮箱:技术支持邮箱

Flag 配置

配置 Flag 格式:

  • Flag 前缀:默认 flag{
  • Flag 后缀:默认 }
  • Flag 长度:动态 Flag 的随机字符串长度

邮件配置

配置 SMTP 邮件服务,用于发送注册验证、密码重置等邮件:

  1. 进入 系统管理邮件配置
  2. 填写 SMTP 信息:
    • SMTP 服务器:如 smtp.gmail.com
    • SMTP 端口:如 587
    • 发件人邮箱:如 noreply@example.com
    • SMTP 密码:邮箱密码或授权码
  3. 点击"测试连接"验证配置
  4. 保存配置

备份与恢复

平台提供后台内置备份能力,建议将其作为日常备份手段,并配合运维侧的数据库与文件备份形成完整灾备方案。

内置备份入口

进入 系统设置备份与恢复(或直接访问 /admin/settings,以页面为准)。

创建备份

  1. 进入备份页面
  2. 点击"创建备份"
  3. 等待备份完成后,在备份列表中查看新生成的备份

下载备份

建议将备份下载并保存到本地或对象存储,避免仅保存在服务器本机。

  1. 在备份列表中选择目标备份
  2. 点击"下载"
  3. 保存 ZIP 文件并做好备份归档(建议按日期/版本号命名)

上传备份

当需要跨服务器迁移或导入历史备份时,可以上传备份 ZIP 文件。

  1. 点击"上传备份"
  2. 选择备份 ZIP 文件
  3. 上传成功后在备份列表中确认已出现对应备份记录

恢复备份

恢复会覆盖现有数据,建议在低峰期执行,并提前做好兜底备份。

  1. 在备份列表中选择目标备份
  2. 点击"恢复"
  3. 按页面提示确认恢复操作
  4. 恢复完成后验证:登录、比赛/题目、容器化题目启动等关键功能

注意

内置备份更适合平台级配置与业务数据的快速备份与迁移。对生产环境,仍建议保留 MySQL(mysqldump)与 uploads 的独立备份,以应对更严重的灾难场景。

更多运维侧的备份与恢复建议请参考:备份与恢复

数据统计

平台概览

  1. 进入 仪表盘
  2. 查看平台统计数据:
    • 用户总数:注册用户数量
    • 题目总数:平台题目数量
    • 比赛总数:已创建的比赛数量
    • 提交总数:Flag 提交次数

用户活跃度

查看用户活跃度统计:

  • 日活跃用户:每日登录用户数
  • 解题趋势:每日解题数量
  • 热门题目:解题人数最多的题目

导出数据

支持导出以下数据:

  • 用户列表:导出所有用户信息
  • 题目列表:导出所有题目信息
  • 比赛数据:导出比赛排行榜和提交记录

安全建议

账号安全

  1. ✅ 修改默认管理员密码
  2. ✅ 定期更换密码
  3. ✅ 不要共享管理员账号

平台安全

  1. ✅ 定期备份数据库
  2. ✅ 监控容器资源使用
  3. ✅ 限制容器生存时间
  4. ✅ 定期清理过期容器
  5. ✅ 配置防火墙规则
  6. ✅ 使用 HTTPS

题目安全

  1. ✅ 使用动态 Flag 防止作弊
  2. ✅ 限制 Flag 提交频率
  3. ✅ 记录所有提交日志
  4. ✅ 监控异常提交行为

常见问题

如何批量导入题目?

目前支持通过 Vulhub 题库批量导入漏洞环境题目。如需导入自定义题目,建议使用 API 接口批量创建。

容器启动失败怎么办?

  1. 检查 Docker 服务是否正常运行
  2. 查看容器日志,定位错误原因
  3. 检查镜像是否存在
  4. 确认端口映射配置正确

如何限制用户提交频率?

在系统配置中,可以设置 Flag 提交间隔时间,防止暴力破解。

获取帮助

如果遇到问题,可以:

  1. 查看 常见问题
  2. 查看 API 文档
  3. 提交 GitHub Issue
  4. 联系技术支持: 5829662@qq.com

Released under the MIT License.