tahmidkhanshuvo/CLite

GitHub: tahmidkhanshuvo/CLite

基于浏览器的轻量级 Linux 终端环境,专为 CTF 练习、命令行学习和安全团队协作而设计,Docker 一键部署即用。

Stars: 1 | Forks: 0

# CLite ``` ____ _ _ _ / ___| | (_) |_ ___ | | | | | | __/ _ \ | |___| |___| | || __/ \____|_____|_|\__\___| ``` CLite 的意思是 **CLI Lite**。 CLite v1 是一个基于浏览器的轻量级 Linux/CTF shell。它在浏览器端使用 xterm.js,后端使用 Node.js/Express/ws,并利用 node-pty 将每个浏览器会话附加到一个临时终端上。 专为合规的 CTF、实验练习、命令行训练以及专属的学习环境而构建。 需要帮助?请联系 admin@tahmidkhan.com.bd。 Screenshot 2026-05-10 045213 Screenshot 2026-05-10 045807 在线发布版: ``` https://clite.tahmidkhan.com.bd ``` ## 发布 ``` Version: 1.0.0 Creator: Tahmid Khan Launch: clite.tahmidkhan.com.bd ``` ## 支持 如需帮助、反馈或访问权限相关问题,请联系: ``` admin@tahmidkhan.com.bd ``` ## 运行环境 Docker 镜像基于: ``` node:22-bookworm-slim Debian GNU/Linux 12 Bookworm ``` 浏览器终端会话以非 root Linux 用户身份运行: ``` ctf ``` 会话主目录是临时的,当 WebSocket 断开连接、会话过期或空闲计时器触发时,它们将被移除。 ``` /tmp/ctf-web-cli/sessions//home ``` ## 模式 公共演示模式: - URL:`/demo` - 无需登录。 - 短超时时间。 - 受限的命令循环。 - 阻止 shell 元字符、网络命令、管理命令和包管理操作。 - 旨在供作品集访客和基础 Linux 练习使用。 - 仅允许安全的本地命令: ``` ls cd pwd cat grep rg find echo file strings base64 python3 fastfetch tree head tail wc sort uniq sed awk gawk cut tr nl diff cmp comm jq xxd md5sum sha1sum sha256sum tar gzip gunzip zip unzip batcat fdfind basename dirname date uname whoami id env printenv ps free df du stat clear help exit ``` 团队模式: - URL:`/team?key=TEAM_SECRET` - 使用共享的 `TEAM_KEY`。 - 以 `ctf` 用户身份启动真正的非 root bash。 - 包含常见的 CTF 和 Linux 工具。 - 仍然没有 `sudo`、`su`、Docker socket 或从浏览器进行 root 访问的权限。 - 允许使用 `PATH` 中已安装的命令行工具,包括网络客户端,如 `ssh`、`curl`、`wget`、`nc` 和 `nmap`。 ## 公共模式 vs 团队模式 公共演示模式是故意限制的。它用于向访客安全地展示 CLite,而不给他们提供一个通用的 shell。它可以检查文件、运行简单的文本处理命令、运行小型 Python 代码片段,并使用 `fastfetch` 显示系统信息。 团队模式是真正的 CTF shell。它为受信任的用户提供了一个带有预安装工具集的普通非 root bash 会话。团队用户可以使用出站网络工具和 SSH 客户端,但他们仍然无法安装系统软件包、使用 sudo、切换用户或从浏览器成为 root 用户。 ## 已安装的工具 核心 shell 和文件工具: ``` bash coreutils findutils grep sed gawk less tar gzip zip unzip file nano vim-tiny xxd tree tmux procps psmisc net-tools moreutils bsdmainutils ripgrep bat fd-find ``` 网络和 Web 工具: ``` curl wget netcat-openbsd socat openssl openssh-client nmap dnsutils whois iputils-ping iproute2 ``` 开发和逆向基础工具: ``` git jq python3 python3-pip python3-venv pipx gcc g++ make gdb binutils strace ltrace patchelf nasm checksec radare2 ``` CTF 辅助工具: ``` sqlmap pngcheck zbar-tools steghide binwalk foremost sleuthkit libimage-exiftool-perl fastfetch ``` 预安装的 Python 包: ``` requests beautifulsoup4 pycryptodome z3-solver capstone unicorn ropper pwntools ``` 可以在临时虚拟环境中安装额外的 Python 包: ``` python3 -m venv venv source venv/bin/activate pip install ``` 这些安装的内容会随会话一起被删除。 ## SSH 用户可以在团队模式中将 SSH 作为客户端使用: ``` ssh user@host scp file user@host:/tmp/ sftp user@host ``` CLite 不运行 SSH 服务器。未启用传入 SSH 对容器的访问。管理员维护应通过 Docker 从主机进行: ``` docker exec -it -u root clite-app bash ``` ## 规则 - 保持 CLite 专注于合规的 CTF、实验练习和专属的学习环境。 - 浏览器会话以非 root 用户 `ctf` 运行。 - 故意移除了 `sudo` 和 `su`。 - 绝不允许浏览器用户运行 `apt install`。 - 请在 Dockerfile 中添加系统软件包,然后重新构建并重新部署。 - 不要挂载 `/var/run/docker.sock`。 - 不要使用 `--privileged` 运行容器。 - 不要将机密信息存储在模板或用户可见的会话文件中。 - `TEAM_KEY` 仅由后端检查。 - CLite 记录会话的开始/结束事件,而不是记录每个输入的命令。 ## 环境变量 ``` PORT=7860 TEAM_KEY=change-me MAX_TEAM_SESSIONS=5 MAX_PUBLIC_SESSIONS=2 PUBLIC_TIMEOUT_MINUTES=10 TEAM_TIMEOUT_MINUTES=180 IDLE_TIMEOUT_MINUTES=10 CTF_UID=1001 CTF_GID=1001 BASE_SESSIONS_DIR=/tmp/ctf-web-cli/sessions ``` ## 使用 Docker 运行 构建: ``` docker build -t clite . ``` 运行: ``` docker run -d --name clite-app -p 7860:7860 -e TEAM_KEY=test123 clite ``` 打开: ``` http://localhost:7860 http://localhost:7860/team?key=test123 http://localhost:7860/demo ``` 生产环境启动: ``` https://clite.tahmidkhan.com.bd ``` 停止: ``` docker stop clite-app ``` 移除: ``` docker rm clite-app ``` 如果端口 `7860` 已被占用: ``` docker run -d --name clite-app -p 7862:7860 -e TEAM_KEY=test123 clite ``` 然后打开: ``` http://localhost:7862/team?key=test123 ``` ## 本地开发 Docker 是运行 CLite 的推荐方式,因为它为用户提供了真实的 Linux 环境。 对于本地 Node 开发: ``` npm install npm start ``` 在 Windows 上,本地开发使用 Windows shell 回退机制。当您需要真正的 Linux CTF 环境时,请使用 Docker 或 WSL。 ## 部署 Hugging Face Spaces: ``` sdk: docker app_port: 7860 ``` 将 `TEAM_KEY` 设置为 Space secret。 Render: ``` PORT=7860 TEAM_KEY= ``` Oracle Cloud VPS: ``` git clone cd CLite docker build -t clite . docker run -d \ --name clite \ --restart unless-stopped \ -p 7860:7860 \ -e TEAM_KEY='' \ clite ``` 在前面配置 Nginx 或 Caddy 以实现 HTTPS。 ## 安全地添加工具 编辑 `Dockerfile` 中的 `apt-get install` 列表,重新构建并重新部署: ``` docker build -t clite . docker rm -f clite-app docker run -d --name clite-app -p 7860:7860 -e TEAM_KEY=test123 clite ``` 优先选择小型命令行工具。避免庞大的字典文件、GUI/浏览器工具、后台服务以及任何需要运行时 root 权限的东西。 ## 故障排除 终端连接后立即关闭: 检查容器日志: ``` docker logs clite-app ``` 确认 `ctf` 用户存在且 `/tmp/ctf-web-cli/sessions` 可写。 团队模式返回 403: `key` 查询参数必须与 `TEAM_KEY` 匹配。 `sudo` 缺失: 这是故意的。CLite 不应向浏览器用户暴露 root shell。 `apt install` 失败: 这是故意的。请将软件包添加到 Dockerfile 并重新构建。 公共演示模式阻止了某个命令: 这是故意的。请使用团队模式以获取更完整的 CTF 工具。
标签:CTF练习, Debian, Docker, Express, GNU通用公共许可证, Linux命令行, Linux学习, MITM代理, Node.js, node-pty, Web Shell, WebSocket, Web终端, xterm.js, 依赖分析, 命令行学习, 命令行训练, 团队协作, 团队实验, 在线终端, 安全防御评估, 教育工具, 沙箱, 浏览器终端, 网络安全, 网络安全靶场, 自定义脚本, 虚拟终端, 请求拦截, 轻量级应用, 远程Shell, 隐私保护, 隔离环境, 靶场环境