BlackBossX/Byte2Code-Session01-Challenge
GitHub: BlackBossX/Byte2Code-Session01-Challenge
一个用于 Linux 教学工作坊的迷你 CTF 平台,集成了自动化账户创建、SSH 挑战任务部署和实时提交监控仪表板。
Stars: 0 | Forks: 0
Byte2Cloud — Workshop Dashboard
一个用于 Byte2Cloud Linux Workshop 的实时提交监控仪表板。
讲师可以实时观看各团队通过 SSH/SCP 上传他们的答案。
## 概述
本仓库包含了端到端运行 Byte2Cloud Linux workshop 所需的一切:
1. **Workshop 设置** — 创建 25 个团队账户,包含任务文件和提交目录。
2. **SSH 修复** — 为所有团队账户启用基于密码的 SSH 登录。
3. **提交仪表板** — 一个用于实时监控团队提交状态的 Web 仪表板,提供两种版本:
- **Python 独立服务器** — 零依赖,可在任何机器上运行。
- **Nginx + PHP 服务器** — 适用于专用 Ubuntu 服务器的生产级部署。
## 仓库结构
```
byte2cloud-scoreboard/
│
├── setup_byte2cloud.sh ← Main workshop setup script (run first)
├── fix_ssh.sh ← Enables SSH password login for teams
│
├── images/ ← Screenshots
│ └── UI.png ← Dashboard UI screenshot
│
├── python-server/ ← Standalone Python dashboard (no nginx needed)
│ ├── server.py ← Python HTTP server (serves UI + API)
│ ├── index.html ← Dashboard frontend (HTML/CSS/JS)
│ ├── setup-service.sh ← Installs server as a systemd background service
│ └── README.md ← Python server specific documentation
│
├── nginx-php-server/ ← Production Nginx + PHP dashboard
│ ├── index.html ← Dashboard frontend (HTML/CSS/JS)
│ ├── submissions.php ← JSON API: scans all team submission folders
│ ├── download.php ← Secure file download endpoint
│ ├── nginx-workshop.conf ← Nginx virtual host configuration
│ ├── install.sh ← Full automated installation script for Ubuntu
│ ├── workshop-dashboard.tar.gz ← Pre-packaged archive of web files
│ └── README.md ← Nginx/PHP server specific documentation
│
└── logos/
├── Byte2Cloud.png
└── byte2cloud_main.png
```
## 第一步 — Workshop 服务器设置
在服务器上以 root 身份运行此命令**一次**,以创建所有 25 个团队账户、任务文件和提交目录。
```
sudo bash setup_byte2cloud.sh
```
### 此脚本的功能
| 步骤 | 操作 |
|---|---|
| 1 | 创建一个 `missionfiles` Linux 组 |
| 2 | 创建 25 个团队账户(`team01`–`team25`),密码为 `Byte2Cloud@2026` |
| 3 | 将一条秘密信息编码为 base64,并将其拆分为 4 个片段 |
| 4 | 在 `/opt/mission/` 下创建任务目录树 |
| 5 | 写入 4 个片段以及一份供学生阅读的 `README.txt` 简报 |
| 6 | 设置权限,使团队可以读取但不能修改片段 |
| 7 | 在 `/opt/submissions/teamXX/` 创建各团队的提交文件夹,并附带 `~/submissions` 符号链接 |
| 8 | 写入限定范围的 `sudoers` 规则,使团队只能使用 `sudo cat` 查看片段 4 |
| 9 | 运行验证检查并打印摘要 |
### 设置完成后的服务器目录布局
```
/opt/mission/
├── README.txt ← Mission brief for students
├── archives/2024/logs/
│ └── fragment_1.frag ← Visible fragment (chmod 444)
└── hidden/
└── .fragment_2.frag ← Hidden fragment (chmod 444)
/var/mission/secrets/
├── .fragment_3.frag ← Hidden fragment (chmod 444)
└── .fragment_4.frag ← Root-only fragment (chmod 700, needs sudo)
/opt/submissions/
├── team01/ ← Team's private upload folder (chmod 700)
├── team02/
└── … team25/
/home/teamXX/
└── submissions → /opt/submissions/teamXX/ ← Symlink for easy SCP
```
## 第二步 — 启用 SSH 密码登录(如有需要)
如果团队无法使用其密码登录,请运行:
```
sudo bash fix_ssh.sh
```
这会安全地编辑 `/etc/ssh/sshd_config`,将针对 `team*` 账户的 `PasswordAuthentication yes` 启用,然后重启 SSH 服务。系统会自动创建原始配置的备份。
## 第三步 — 运行提交仪表板
在以下两种服务器选项中选择**其一**。
### 选项 A:Python 独立服务器 *(推荐 — 无依赖)*
**适用场景:** 你希望在任何机器(Linux/Mac)上运行仪表板,而无需安装 Nginx 或 PHP。
```
cd python-server/
python3 server.py
```
从其他计算机访问:
```
http://
:8080
```
**将其作为永久后台服务运行(开机自启):**
```
sudo bash python-server/setup-service.sh
```
| 命令 | 操作 |
|---|---|
| `sudo systemctl status workshop-dashboard` | 检查服务是否正在运行 |
| `sudo systemctl stop workshop-dashboard` | 停止服务 |
| `sudo systemctl restart workshop-dashboard` | 重启服务 |
| `sudo journalctl -u workshop-dashboard -f` | 查看实时日志 |
### 选项 B:Nginx + PHP 服务器 *(生产级)*
**适用场景:** 你正将其部署在专用的 Ubuntu 24.04 服务器上(例如 DigitalOcean droplet)。
```
sudo bash nginx-php-server/install.sh
```
这将安装 Nginx 和 PHP-FPM,将所有 Web 文件部署到 `/var/www/workshop/`,设置 bind-mount 以便 Web 服务器能够读取提交文件夹,配置防火墙,并启动所有服务。
访问仪表板地址:
```
http://
```
## 仪表板功能
| 功能 | 详情 |
|---|---|
| **自动刷新** | 通过 AJAX 每 5 秒获取新数据 — 无需重新加载页面 |
| **提交计数器** | 实时统计所有 25 个团队的提交总数 |
| **活跃团队** | 显示至少提交过一个文件的团队数量 |
| **最近上传** | 高亮显示最近 5 分钟内上传的文件 |
| **排行榜** | 按提交次数对团队进行排名,并配有动画进度条 |
| **搜索与筛选** | 按团队筛选文件表格或按文件名搜索 |
| **安全下载** | 直接从仪表板 UI 下载任何提交的文件 |
| **导出 CSV** | 将所有提交数据导出为 `.csv` 文件 |
| **浅色 / 深色模式** | 在深色(默认)和浅色主题之间切换 |
| **倒计时环** | 可视化的倒计时器,显示距离下次刷新的秒数 |
## Workshop 任务 — 运作方式
学生通过 SSH 登录到服务器,并按照 `README.txt` 的任务简报进行操作:
1. **查找 4 个 base64 片段**,这些片段隐藏在服务器文件系统中,需使用 Linux 命令(`ls -la`、`find`、`sudo cat`)。
2. **使用安全拷贝将片段 SCP 到他们的本地机器**。
3. **合并并解码**片段:`cat frag1 frag2 frag3 frag4 | base64 -d > message.txt`
4. **从解码后的信息中提取秘密代码词**。
5. **提交他们的答案**,方法是通过 SCP 将一个文本文件上传到 `~/submissions/`。
```
# SSH 登录服务器
ssh team01@
# 密码: Byte2Cloud@2026
# 阅读任务简报
cat /opt/mission/README.txt
```
## 快速参考
| 任务 | 命令 |
|---|---|
| 设置 workshop(运行一次) | `sudo bash setup_byte2cloud.sh` |
| 修复 SSH 密码登录 | `sudo bash fix_ssh.sh` |
| 启动 Python 仪表板 | `python3 python-server/server.py` |
| 将 Python 仪表板安装为服务 | `sudo bash python-server/setup-service.sh` |
| 安装 Nginx/PHP 仪表板 | `sudo bash nginx-php-server/install.sh` |
| 以团队身份连接 | `ssh team01@` (密码: `Byte2Cloud@2026`) |
| 提交答案 | `scp answer.txt team01@:~/submissions/` |标签:CTF平台, SSH/SCP, 后端开发, 实时计分看板, 应用安全, 教学实验平台, 自动化运维脚本, 逆向工具